基于NNEWN NSR3588开发板Android12系统实现四屏异显
- RK3588四屏异显功能实现介绍
- 1.硬件连接
- 2.内核dts配置
- 3.Android异显示方案
- 4.四屏异显测试APK及效果演示
- 5.技术交流
RK3588四屏异显功能实现介绍
1.硬件连接
4路显示接口的组合为:HDMI0+HDMI1+DP0+MIPI DSI1
NSR3588开发板上的4路显示接口如下(红色方框):
4屏连接后整机环境搭建如下:
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主界面如下:
演示效果如下:
5.技术交流
介绍了这么多,先给兄弟们上点干货。
这里提供RK3588多屏异显示的测试APK,百度网盘地址:
链接:https://pan.baidu.com/s/1mLw-BVpmLE7v-qzQsQdiig
提取码:6efl