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" />
    <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,打开该功能。异显状态时,开机鼠标默认在主屏显示,当鼠标移动到屏幕的边缘时,会自动切换到副屏的中心位置显示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Debezium发布历史49

原文地址&#xff1a; https://debezium.io/blog/2019/02/19/reliable-microservices-data-exchange-with-the-outbox-pattern/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 使用发件箱模式进行可靠的微服务数…

FSMC驱动LCD

FSMC( Flexible static memory controller)全称“灵活的静态存储器控制器”&#xff0c;是 STM32中一个很有特色的外设&#xff0c;通过 FSMC&#xff0c;STM32可以通过FSMC与SRAM、ROM、PSRAM、Nor Flash和NandFlash存储器的引脚相连&#xff0c;从而进行数据的交换。 FSMC的本…

Java面试项目推荐,异构数据源数据流转服务DatalinkX

前言 作为一个年迈的夹娃练习生&#xff0c;每次到了春招秋招面试实习生时都能看到一批简历&#xff0c;十个简历里得有七八个是写商城或者外卖项目。 不由得想到了我大四那会&#xff0c;由于没有啥项目经验&#xff0c;又想借一个质量高点的项目通过简历初筛&#xff0c;就…

LeetCode 2221. 数组的三角和

文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 nums 的 三角和 是执行以下操作以后最后剩下元素的值: nums 初始包含 n 个元素。如果 n == 1 ,终止 …

系列十一、(三)Sentinel控制台

一、Sentinel控制台 二、实时监控 2.1、概述 实时监控&#xff0c;顾名思义是用来实时监控的&#xff0c;具体监控的是接口请求通过的QPS和拒绝的QPS&#xff0c;默认情况下没有访问记录&#xff0c;所以看不到任何记录&#xff0c;需要访问接口才会有记录。另外需要注意&…

每10分钟一更新的实时卫星影像

我们为大家分享了一个可以查看下载高时效卫星影像的方法。 这里再为大家推荐一个可以查看近乎实时的卫星影像的网站&#xff0c;卫星影像每10分钟更新一次。 实时卫星影像 打开网站&#xff08;zoom.earth&#xff09;&#xff0c;可以查看实时卫星影像画面&#xff0c;在左…

[C#]C# OpenVINO部署yolov8图像分类模型

【官方框架地址】 https://github.com/ultralytics/ultralytics.git 【算法介绍】 YOLOv8 抛弃了前几代模型的 Anchor-Base。 YOLO 是一种基于图像全局信息进行预测的目标检测系统。自 2015 年 Joseph Redmon、Ali Farhadi 等人提出初代模型以来&#xff0c;领域内的研究者们…

2024年天津体育学院专升本专业考试考生入场及考前须知

天津体育学院2024年高职升本科招生专业考试考生考前须知 一、考生入场及考试要求 1.考生于1月6日笔试考试当天&#xff0c;根据考试时间提前30分钟到达天津体育学院新校区东门&#xff0c;凭专业考试准考证、有效身份证原件&#xff0c;经查验合格后方可允许进入学校。 2.笔…

python语言在web上的应用:如何节省服务器资源?

背景介绍​ 在web开发中的应用广泛​ 在web开发中的应用广泛。随着互联网的发展&#xff0c;web应用越来越普遍&#xff0c;而Python作为一种简洁、高效的编程语言&#xff0c;被广泛应用于web开发领域。Python提供了丰富的库和框架&#xff0c;如Django、Flask等&#xff0c…

软件验收测试计划、验收测试报告案例模板参考

1. 概述 1.1. 编写目的 1.2. 测试背景 1.3. 测试依据 1.4. 测试对象 1.5. 测试资源 2. 测试方式与环境 2.1. 测试方式 2.2. 测试环境 3. 测试结果 3.1. 功能适合性和准确性 3.1.1. 总体统计 3.1.2. 详细结果 3.2. 安全性 3.3. 可靠性和性能 4. 总体分析 5. 测试…

数字逻辑电路入门:从晶体管到逻辑门

数字逻辑电路入门&#xff1a;从晶体管到逻辑门 这是数字逻辑电路中最基础的部分。但是并非那么容易理解。 1、晶体管 mosfet&#xff1a;场效应晶体管&#xff0c;是电压控制元件。cmos&#xff1a;是指由mos管构成的门级电路通常是互补的。BJT&#xff1a;一种三极管&…

视频智能分析/云存储平台EasyCVR接入海康SDK,通道名称未自动更新该如何解决?

视频监控GB28181平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能…

c++-智能指针

1、概念 堆内存的对象需要手动使用delete销毁&#xff0c;如果忘记使用delete销毁就会造成内存泄漏。 所以C在ISO 98标注中引入了智能指针的概念&#xff0c;并在C11 中趋于完善。 使用智能指针可以让堆内存对象具有栈内存对象的特性。原理时给需要自动回收的堆内存对象套上一层…

C++-异常处理

1、概念 异常时程序在执行期间产生的问题。C异常是指在程序运行时发生的特殊情况。比如string::at函数下标越界等。 异常提供了一种转移程序控制权的方式。 一旦程序出现异常没有经过处理&#xff0c;就会造成程序运行崩溃。 处理异常的方式有&#xff1a;抛出异常&#xff08;…

选择排序!!!基础排序详解 C语言版

目录 1.什么是选择排序 2.选择排序源代码 3.优化代码 1.什么是选择排序 这是一个选择排序的流程图&#xff0c;其实很简单&#xff0c;就是每次挑选数字中最小的作为第一个 &#xff0c;直到整个数据有序就结束了 顾名思义&#xff0c;选择&#xff0c;那就是选取&#xff0c…

css的一些属性

我们在写项目的时候&#xff0c;会遇到多种多样的样式&#xff0c;大部分都是由css来实现的&#xff0c;css可以让我们的页面更美观&#xff0c;css通常是配合HTML使用&#xff0c;代码较为简单! 下面我就给大家举几个较为常用的一些css属性。 1.CSS中怎样让元素圆角化&#…

【Axure高保真原型】树形表格_多选效果

今天和大家分享树形表格_多选效果的原型模板&#xff0c;点击树的箭头可以展开或者收起子节点&#xff0c;点击多选按钮可以选中或取消选择该行以及子级行内容&#xff0c;同时反选父级行内容&#xff0c;父级行内容能根据子级选中的数量自动反选&#xff0c;包括全选、半选和未…

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

File: rust/compiler/rustc_target/src/spec/armv7_unknown_linux_uclibceabi.rs 该文件的作用是定义了ARMv7架构使用uClibc-eabi工具链时的目标环境配置。 在Rust中&#xff0c;针对不同的目标平台&#xff0c;需要提供对应的配置文件以确保正确地编译和链接代码。这些配置文件…

小红书投放策略分析,如何打造个性化内容?

作为一个发展多年的成熟内容平台&#xff0c;小红书不同于其他平台&#xff0c;其用户数与影响力&#xff0c;一直处于不断增长中。因而作为品牌方&#xff0c;想要充分得到平台的流量红利&#xff0c;就必须学会制定小红书投放策略。今天&#xff0c;我们和大家分享下小红书投…

PyQT5实现图像处理应用(含Windows7下完整打包方案)

目录 1、任务概述2、环境安装2.1 创建虚拟环境2.2 安装依赖库 3、程序开发3.1 框架搭建3.2 读取图像3.3 图像处理 4、打包部署5、小结 1、任务概述 本篇博文将通过PyQT5来实现一个简单的图像处理应用&#xff0c;并完成打包部署。 本文开发平台&#xff1a;Windows10 64位系统…