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

news2024/12/24 11:36:23

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" />
    <display
        name="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" />
    <display
        name="local:1"
        shouldShowIme="true"
        forcedDensity="240"/>
</display-settings>

3.3 鼠标主副屏切换显示

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1362754.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATTCK视角下的信息收集:主机发现

目录 1、利用协议主动探测主机存活 利用ICMP发现主机 利用ARP发现主机 利用NetBIOS协议发现主机 利用TCP/UDP发现主机 利用DNS协议发现主机 利用PRC协议发现主机程序 2、被动主机存活检测 利用Browser主机探测存活主机 利用ip段探测主机存活 利用net命令探测主机存活…

论文笔记 Understanding Electricity-Theft Behavior via Multi-Source Data

WWW 2020 oral 1 INTRO 1.1 背景 1.1.1 窃电 窃电&#xff08;electricity theft&#xff09;指用户为了逃避电费而进行非法操作的一种行为 常用的反窃电方法可分为两类&#xff1a; 基于硬件驱动的反窃电方法 ​​​​​​​电表开盖检测、集中器检测。。。。 硬件驱动的…

18.标题统计

题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);String str sc.nextLine();int res 0;for(int i0;i<str.length();i) {char c str.charAt(i);if(c! && c!\n) {res;}}System.o…

Simply主题 简约风格的Emlog博客模板 响应式布局

主题介绍 Simply是一款简约风格的Emlog博客模板&#xff0c;响应式布局、界面简单大方&#xff0c;实用性强&#xff01; 支持夜间模式&#xff0c;采用localStorage存储配置。IOS系统下支持随系统自动切换浅/深色模式。 文章页支持显示文章字数及阅读时间。 支持http/https …

MCS-51单片机的基本结构

目录 一.单片机的逻辑结构 1.单片机的基本结构 2.引脚 3.中断系统 4.时钟电路 5.时序 6.典型指令的取指、执行时序 7.80C51中定时器/计数器 二.单片机的复位 三.程序的执行方式 1.单步执行方式 2.低功耗操作方式 3.EPROM编程和校验方式 首先补充一个知识点&#x…

JVM工作原理与实战(八):类加载器的分类

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、类加载器介绍 二、类加载器的分类 1.Java代码实现的类加载器 2.Java虚拟机底层源码实现的类加载器 3.默认的类加载器层次&#xff08;JDK8及之前的版本&#xff09; 总结 前言…

听GPT 讲Rust源代码--compiler(15)

File: rust/compiler/rustc_arena/src/lib.rs 在Rust源代码中&#xff0c;rustc_arena/src/lib.rs文件定义了TypedArena&#xff0c;ArenaChunk&#xff0c;DroplessArena和Arena结构体&#xff0c;以及一些与内存分配和容器操作相关的函数。 cold_path<F: FnOnce,drop,new,…

PHP在线sqlite转html表格小功能(sqlite2html)

6KB PHP实现在线sqlite转html表格小功能(支持大文件上传,得到一表一文件) 可自定义&#xff1a;上传限制大小&#xff1b;支持后缀格式!下载格式位压缩包&#xff0c;内含一表一个html文件。 作用&#xff1a;程序员实用工具&#xff0c;上传sqlite数据得到html表格数据供本地…

主流大语言模型从预训练到微调的技术原理

引言 本文设计的内容主要包含以下几个方面&#xff1a; 比较 LLaMA、ChatGLM、Falcon 等大语言模型的细节&#xff1a;tokenizer、位置编码、Layer Normalization、激活函数等。大语言模型的分布式训练技术&#xff1a;数据并行、张量模型并行、流水线并行、3D 并行、零冗余优…

迁移数据mysql到clickhouse

场景&#xff1a; 项目上需要将mysql表中数据迁移到clickhouse。 理论&#xff1a; 借助MaterializeMySQL 说明&#xff1a; 首先该方案实施需要启动mysql的binlog配置否则同步不了&#xff0c;尽管MaterializeMySQL官方说是在实验阶段&#xff0c;不应该在生产上使用&#x…

【详解】静态库和动态库的认识和使用【Linux】

静态库和动态库的认识和使用 静态库和动态库的概述动静态库的实现静态库动态库库文件名称和引入库的名称 静态库和动态库的概述 静态库&#xff08;.a&#xff09;&#xff1a;程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库 动态库&#…

【InternLM】书生-浦语大模型demo搭建服务接口部署本地映射

目录 前言一、InternLM大模型介绍1-1、大模型简介1-2、InternLM大模型简介1-2-1、InternLM-7B1-2-2、InternLM-20B 二、从0开始搭建InternLM-Chat-7B 智能对话 Demo2-0、环境搭建2-1、创建虚拟环境2-2、导入所需要的包2-3、模型下载2-4、代码克隆2-5、终端运行 三、服务器接口部…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端鉴权拦截器实现

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

C# 自定义配置文件序列化生成+文件格式错误自动回档

文章目录 前言选择Xml简单的Xml使用测试用例简单的写简单的读简单的生成配置修改配置类测试用例运行结果对比 代码逻辑封装逻辑示意封装好的代码测试生成配置文件格式错误测试使用默认值覆盖来解决问题 配置文件人为修改错误如何解决解决方案代码测试用例运行结果 代码封装总结…

Linux系统使用超详细(八)~磁盘管理

目录 一、认识磁盘 二、磁盘运行机制 三、磁盘检查 3.1查找设备名称和分区号 3.1.1使用lsblk命令&#xff1a; 3.1.2使用fdisk命令&#xff1a; 3.1.3使用blkid命令&#xff1a; 3.2检查方向 3.2.1文件系统完整性&#xff1a; 3.2.2磁盘健康状态&#xff1a; 3.2.3磁…

C#,深度优先搜索(DFS)、广度优先搜索(BFS)算法的源代码与数据可视化

概述 下载源代码&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1sLxMT78LVg2dWyXXFvM--w?pwd2kwl 提取码&#xff1a;2kwl --来自百度网盘超级会员V5的分享https://pan.baidu.com/s/1sLxMT78LVg2dWyXXFvM--w?pwd2kwl 深度优先搜索&#xff08;亦称深度优先遍历&a…

uniapp选择android非图片文件的方案踩坑记录

这个简单的问题我遇到下面6大坑&#xff0c;原始需求是选择app如android的excel然后读取到页面并上传表格数据json 先看看效果 uniapp 选择app excel文件读取 1.uniapp自带不支持 uniapp选择图片和视频非常方便自带已经支持可以直接上传和读取 但是选择word excel的时候就出现…

红外传感器(含代码注释)

一.引言 红外传感器是一种能够检测和测量红外光的传感器。由于红外光的特性&#xff0c;红外传感器在许多领域中得到了广泛的应用&#xff0c;如军事、航空航天、医疗、环保、工业控制等。本文将详细介绍红外传感器的原理、应用以及未来发展趋势。 二.红外传感器的工作原理 红外…

Vue3-41-组件- 动态组件 component 标签 和 is 属性 的使用

说明 <component> 标签 有一个 is 属性&#xff0c; 可以给这个 is属性 赋值为一个 组件对象&#xff0c; 这样这个<component> 标签就可以渲染指定的组件对象了。 使用案例 本案例中会 准备两个简单的组件&#xff0c; 在 App.vue 中导入这两个组件&#xff0c;并…

Thonny开发ESP32点灯

简介 ESP32是一款功能强大的低功耗微控制器&#xff0c;由乐鑫&#xff08;Espressif&#xff09;公司开发。它集成了Wi-Fi和蓝牙功能&#xff0c;适用于各种物联网应用。Thonny是一款基于Python的开源集成开发环境&#xff08;IDE&#xff09;&#xff0c;专为MicroPython设计…