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

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一