雙屏異顯的三種方式
1姑蓝、通過adb命令將app啟動(dòng)在指定的屏幕
adb shell am start -n com.android.demo/com.android.demo.MainActivity --display 1
adb shell am start -n com.android.demo/com.android.demo.MainActivity --user 0 --display 1
參數(shù)--display指定屏幕幔烛, display 0轴咱,表示第一塊屏幕; display 1萎战,表示第2塊屏幕单山。
參數(shù)--user可以啟動(dòng)指定的用戶,在多用戶下有效具滴,系統(tǒng)默認(rèn)是--user 0。
2师倔、通過Presentation
Presentation是一個(gè)特殊的dialog构韵,它的目的是顯示內(nèi)容到第二屏幕。在Presentation創(chuàng)建的時(shí)候關(guān)聯(lián)一個(gè)目標(biāo)設(shè)備趋艘,確定Presentation要顯示在哪個(gè)設(shè)備上疲恢,根據(jù)這個(gè)設(shè)備的信息來配置Presentation的context和resources信息。
獲取輔助屏幕有兩種方式:MediaRouter或者DisplayManager
MediaRouter mediaRouter = (MediaRouter) context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute();---先獲取RouteInfo瓷胧,再獲取Display
//MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(ROUTE_TYPE_USER)
if(route != null) {
Display presentationDisplay = route.getPresentationDisplay();
if (presentationDisplay != null) {
Presentation presentation = new MyPresentation(context, presentationDisplay);
presentation.show();
}
}
DisplayManager mDisplayManager = getSystemService(Context.DISPLAY_SERVICE);
Display displays = mDisplayManager.getDisplay(1);
3. 通過startActivity
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(1); //這里一直display0是第一塊屏显拳;display1是第二塊屏
Intent secondIntent = new Intent();
ComponentName cn= new ComponentName("com.android.demo","com.android.demo.SecondActivity");
secondIntent .setComponent(cn);
//該句很重要搓萧,不添加則無法推送到副屏
secondIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(secondIntent, options.toBundle());
使用ActivityOptions指定顯示屏幕
為Intent增加標(biāo)志Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
備注:
通過Activity的方式顯示在副屏上會(huì)帶來一些問題
1杂数、SoftInputWindow,Toast只顯示在主屏
當(dāng)在副屏的Activity中調(diào)用上面控件時(shí)瘸洛,控件會(huì)顯示到主屏上
PopupWindow揍移、Dialog可以正常顯示
但是傳入的Context必須是當(dāng)前Activity的
以上問題需要修改Framwork適配控件
未完待續(xù)……