RK3588 Android 12 异显功能

本文介绍了如何通过命令行控制Android设备的界面显示和旋转,包括在双屏和三屏场景下的设置方法,以及使用Presentation功能在第二屏幕显示内容的详细步骤,涉及权限管理和Display类获取方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.通过命令行方式

显示:可通过adb shell am start --display <display_id> <activity_name>命令将对应界面显示到指定显示器(ps:)

旋转功能:双屏场景下,副屏可通过persist.sys.rotation.einit-1 (属性值为 0,1,2,3)属性设置不同的方向,例如 setprop persist.sys.rotation.einit-1 1,设置副屏旋转 90 度,设置该属性后需重启机器验证。

在三屏场景下,存在一个屏幕做为主屏,另外两个屏幕做为副屏情况。两个副屏需要分别设置 persist.sys.rotation.einit-1 ,persist.sys.rotation.einit-2(属性值为0,1,2,3)这两个属性来控制对应屏幕的方向。(这两个属性分别对应 port1,port2 两个副屏)。

鼠标切换:设置 sys.mouse.presentation 为 1,打开该功能。异显状态时,开机鼠标默认在主屏显示,当鼠

标移动到屏幕的边缘时,会自动切换到副屏的中心位置显示

2.Presentation方式

Presentation是一个特殊的dialog,它的目的是显示内容到第二屏幕

使用具体步骤:

(1).申请权限:SYSTEM_ALERT_WINDOW

需要在AndroidManifest.xml中添加权限:

<--! 危险权限-->
<uses-permission  android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

说明:SYSTEM_ALERT_WINDOW权限申请和危险权限申请步骤不同,而且不需要startActivityForResult/onActivityResult的回调:

        //大于android 6.0才可以申请权限
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && this.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.M) {
            if (!Settings.canDrawOverlays(this)) {
                //隐式Intent
                Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));//不加会显示所有可能的app
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
                //TODO 非常不建议使用startActivityForResult,已测试。
            } else {
                Toast.makeText(SpecialAct.this, "双屏异显-授权通过,可以使用了", Toast.LENGTH_SHORT).show();
                //TODO do something you need
            }
        }
(2).三种方式获取Display类:

方式1:MediaRoute

mediaRouter = (MediaRouter) getSystemService(Context.MEDIA_ROUTER_SERVICE);
              MediaRouter.RouteInfo localRouteInfo = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_AUDIO);
              display = localRouteInfo != null ? localRouteInfo.getPresentationDisplay() : null;
              if (display != null) {
                  showPresentation(display);
              } else {
                  Toast.makeText(MainActivity.this, "不支持分屏", Toast.LENGTH_SHORT).show();
              }

方式2:获取可支持的displahy,displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION)

    displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
               Display[] arrayOfDisplay = displayManager.getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION);
               if (arrayOfDisplay.length > 0) {
                   showPresentation(arrayOfDisplay[0]);//取第一个分屏使用
               } else {
                   Toast.makeText(MainActivity.this, "不支持分屏", Toast.LENGTH_SHORT).show();
               }

方式3:获取所有的display,包括主屏幕,displayManager.getDisplays()

默认displayManager = (DisplayManager)getSystemService(Context.DISPLAY_SERVICE);
             Display[] presentationDisplays = displayManager.getDisplays();
             if (presentationDisplays.length > 1) {
                 presentation2 = new MyPresentation2(this, presentationDisplays[1]);
                 presentation2.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//TYPE_SYSTEM_ALERT / TYPE_PHONE
                 presentation2.show();
             } else {
                 Toast.makeText(MainActivity.this, "不支持分屏", Toast.LENGTH_SHORT).show();
             }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈~~哈~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值