Rockchip平台双屏异显功能实现(基于Android13)

2024-01-06 08:20

本文主要是介绍Rockchip平台双屏异显功能实现(基于Android13),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Rockchip平台双屏异显功能实现(基于Android13)

1. 异显实现方案

Rockchip SDK平台支持两种不同的异显方案:Android Presentation和Android Activity指定屏幕启动。

使用Android Presentation方案,需要在APP开发中调用相应接口以使指定视图(Presentation视图是一种特殊的对话框类型视图)在副屏上显示。

而使用Android Activity指定屏幕启动方案,APP在启动activity时可以使用display id参数直接在相应屏幕上显示,无需源代码便可以通过命令行或系统接口将第三方应用程序的activity投影到副屏上。

这两种方案主要区别在于:

  1. Android Presentation方案需要独立开发activity并将需要显示的内容投影到副屏上,而Android Activity指定屏幕启动方案则可以不需要源代码,只需通过命令行或系统接口将第三方应用程序的activity投影到副屏上;

  2. Android Presentation方案只有一个activity位于顶层,通过特殊的对话框将指定内容显示在副屏上,而Android Activity指定屏幕启动方案则是两个activity分别显示在主屏和副屏上。

1.1 Presentation

SDK已经提供了与该接口相关的演示demo,请进入development/samples/ApiDemos目录,使用mm编译生成相应的apk。安装apk后,点击App->Activity->Presentation选项即可进入Presentation调用界面。在该界面上,需要勾选副屏复选框选项,才能在副屏上显示相应的图片。

具体的代码位于以下路径:development/samples/ApiDemos/src/com/example/android/apis/app/PresentationActivity.java

1.2 Android Activity 指定屏幕启动

startActivity接口的参数中设置指定屏幕的display id,可以直接在指定屏幕上启动显示Activity

Activity的多显示器支持需要设备支持<feature name="android.software.activities_on_secondary_displays" />。同时,应用程序或者Activity需要支持分屏属性,即在<application>或者<activity>标签下设置新的属性android:resizeableActivity="true"。这个属性在目标版本为Android N及以上时,android:resizeableActivity的默认值就是true

ActivityOptions提供了两个新函数来支持多个显示器:

  • setLaunchDisplayId():指定Activity在启动后应该显示在哪个显示器上。
  • getLaunchDisplayId():返回操作组件当前启动的显示器。

使用示例:
在示例中,使用MediaRouter接口获取副屏的display id,同样地,也可以使用DisplayManager接口获取相应的display id。需要注意的是,此处只能打开其他包中的Activity,否则会提示:“App does not support launch on secondary displays”。

private void showSecondByActivity(Context context) {ActivityOptions options = ActivityOptions.makeBasic();MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO);if (route != null) {Display presentationDisplay = route.getPresentationDisplay();options.setLaunchDisplayId(presentationDisplay.getDisplayId());//options.Intent intent = new Intent("android.intent.action.MUSIC_PLAYER");intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent, options.toBundle());}
}

同时,adb shell也进行了扩展,以支持多个显示器。shell start命令现在可以用于启动操作组件,并指定目标显示器:

adb shell am start --display <display_id> <activity_name>

例如:adb shell am start --display 1 com.android.settings/.Settings(将Settings界面启动到指定的副屏)。

2. 副屏方向配置

RK3568 存在双屏和三屏的使用场景, 在双屏场景下,副屏可以通过设置属性 persist.sys.rotation.einit-1(属性值为 0,1,2,3)来调整不同的方向。例如,设置命令为 setprop persist.sys.rotation.einit-1 1,可以将副屏旋转 90 度。设置完毕后,需要重启机器才能生效。

在三屏场景下,存在一个屏幕做为主屏,另外两个屏幕做为副屏。根据如下 dumpsys input 信息,系统中三个显示屏对应的 viewport 如下:

  • Viewport INTERNAL: displayId=0, uniqueId=local:0, port=0, orientation=0, logicalFrame=[0, 0, 1080, 1920], physicalFrame=[0, 0, 1080, 1920], deviceSize=[1080, 1920], isActive=[1]
  • Viewport EXTERNAL: displayId=0, uniqueId=local:1, port=1, orientation=1, logicalFrame=[0, 0, 1080, 1920], physicalFrame=[0, 0, 720, 1280], deviceSize=[720, 1280], isActive=[1]
  • Viewport EXTERNAL: displayId=0, uniqueId=local:2, port=2, orientation=0, logicalFrame=[0, 0, 1080, 1920], physicalFrame=[0, 0, 1440, 900], deviceSize=[1440, 900], isActive=[1]

两个副屏需要分别设置 persist.sys.rotation.einit-1persist.sys.rotation.einit-2(属性值为 0,1,2,3)这两个属性来控制对应屏幕的方向。(这两个属性分别对应 port1port2 两个副屏)。

此外,对于 RK3288、RK3399、PX30 和 RK3326 等芯片,副屏方向可以通过设置属性 persist.sys.rotation.einit(属性值为 0,1,2,3)来调整。例如,设置命令为 setprop persist.sys.rotation.einit 1,可以将副屏旋转 90 度。设置完毕后,同样需要重启机器才能生效。

3. 其他配置

3.1 支持输入法在副屏显示

device/rockchip/common/display_settings.xml 中设置相应屏幕 shouldShowImetrue,如下配置:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings><config identifier="0" /><displayname="local:1"shouldShowIme="true"forcedDensity="240"/>
</display-settings>

3.2 副屏 DPI 设置

device/rockchip/common/display_settings.xml 中设置 forcedDensity,例如:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings><config identifier="0" /><displayname="local:1"shouldShowIme="true"forcedDensity="240"/>
</display-settings>

3.3 鼠标主副屏切换显示

设置 sys.mouse.presentation1,打开该功能。异显状态时,开机鼠标默认在主屏显示,当鼠标移动到屏幕的边缘时,会自动切换到副屏的中心位置显示。

这篇关于Rockchip平台双屏异显功能实现(基于Android13)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/575767

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

如何解决线上平台抽佣高 线下门店客流少的痛点!

目前,许多传统零售店铺正遭遇客源下降的难题。尽管广告推广能带来一定的客流,但其费用昂贵。鉴于此,众多零售商纷纷选择加入像美团、饿了么和抖音这样的大型在线平台,但这些平台的高佣金率导致了利润的大幅缩水。在这样的市场环境下,商家之间的合作网络逐渐成为一种有效的解决方案,通过资源和客户基础的共享,实现共同的利益增长。 以最近在上海兴起的一个跨行业合作平台为例,该平台融合了环保消费积分系统,在短