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();
}