当前位置: 首页>移动开发>正文

android多屏异显焦点 android三屏异显


基于NNEWN NSR3588开发板Android12系统实现四屏异显

  • RK3588四屏异显功能实现介绍
  • 1.硬件连接
  • 2.内核dts配置
  • 3.Android异显示方案
  • 4.四屏异显测试APK及效果演示
  • 5.技术交流


RK3588四屏异显功能实现介绍

1.硬件连接

4路显示接口的组合为:HDMI0+HDMI1+DP0+MIPI DSI1

NSR3588开发板上的4路显示接口如下(红色方框):

android多屏异显焦点 android三屏异显,android多屏异显焦点 android三屏异显_技术交流,第1张

4屏连接后整机环境搭建如下:

android多屏异显焦点 android三屏异显,android多屏异显焦点 android三屏异显_android多屏异显焦点_02,第2张

2.内核dts配置

(1)RK3588的4个显示VOP分配如下:
HDMI0绑定到VP0
HDMI1绑定到VP1
DP0绑定到VP2
MIPI DSI1绑定到VP3

(2)dts配置
配置打开HDMI0和HDMI1

&hdmi0 {
        enable-gpios = <&gpio4 RK_PB1 GPIO_ACTIVE_HIGH>;
        status = "okay";
};

&hdmi0_in_vp0 {
        status = "okay";
};

&route_hdmi0 {
        status = "okay";
        connect = <&vp0_out_hdmi0>;
};

&hdmi1 {
        status = "okay";
};

&hdmi1_in_vp1 {
        status = "okay";
};

&route_hdmi1 {
        status = "okay";
        connect = <&vp1_out_hdmi1>;
};

配置打开MIPI DSI1

&dsi1_in_vp2 {
       status = "disabled";
 };

 &dsi1_in_vp3 {
       status = "okay";
 };

 &route_dsi1 {
        status = "okay";
       connect = <&vp3_out_dsi1>;
 };

打开Type-C DP功能

&dp0 {
        status = "okay";
};

&dp0_in_vp2 {
        status = "okay";
};

3.Android异显示方案

PS:本段摘自<Rockchip Android11 异显开发指南.pdf>

我们目前采用的是Andorid Activity 指定屏幕启动的方案:
在startActivity 接口参数中设置指定屏幕的display id,Activity 将在指定屏幕上直接启动显示。

Activity 的多显示器支持需要设备支持

<feature name="android.software.activities_on_secondary_displays" />

同时application 或者activity 需要支持分屏属性即

<application>或者<activity>标签下设置新的属性android:resizeableActivity="true"

这个属性在你target到Android N 后android:resizeableActivity 的默认值就是true。

ActivityOptions 提供两个新函数以支持多个显示器:
setLaunchDisplayId() 指定Activity 在启动后应显示在哪个显示器上。
getLaunchDisplayId() 返回操作组件的当前启动显示器。
setLaunchDisplayId() 使用示例:
示例中使用MediaRouter 接口获取副屏的display id,同理也可以使用
DisplayManager 接口获取响应的display id。

注意此处只能打开其他包中的Activity,否则会提示:“App does not support launch onsecondary 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 界面启动到指定的副屏)

4.四屏异显测试APK及效果演示

四屏异显的测试APK主界面如下:

android多屏异显焦点 android三屏异显,android多屏异显焦点 android三屏异显_技术交流_03,第3张

演示效果如下:

android多屏异显焦点 android三屏异显,android多屏异显焦点 android三屏异显_android_04,第4张

5.技术交流

介绍了这么多,先给兄弟们上点干货。
这里提供RK3588多屏异显示的测试APK,百度网盘地址:
链接:https://pan.baidu.com/s/1mLw-BVpmLE7v-qzQsQdiig
提取码:6efl


https://www.xamrdz.com/mobile/42w1962571.html

相关文章: