2017-03-23 86 views
2

Android-O中新的ActivityOptions setLaunchDisplayId(int launchDisplayId)函數在嘗試啓動活動意圖時似乎總會使我的應用程序崩潰。在輔助顯示器上啓動Android-O

當我從我自己的應用程序啓動活動並嘗試啓動其他應用程序時,即Chrome Canary時,都會這樣。

有誰知道如果這是新API的一個普遍的問題我失去的東西:

我的一小段代碼是以下:

options.setLaunchDisplayId(1); startActivity(intent, options);

我正在用'模擬第二個屏幕'進行測試(如果重要,則爲@ 1080p)。

UPDATE 我已經嘗試了ADB命令adb shell start com.chrome.canary --display 1, 和我得到的消息:

開始:必須是根

+0

你怎麼確定'1'是正確的數字?當我使用模擬的第二個屏幕時,第二個屏幕的ID是'2' AFAICT。我不會崩潰,但我也沒有從顯示屏上看到活動。順便說一句,你忘了''在'adb shell am start'中。 – CommonsWare

+0

我已通過獲取演示文稿顯示ID與新API連接到外部顯示器。但我仍然在努力尋找與第二個屏幕互動的方式。使用舊API時,我只能使用我自己的活動,因此我只能將手機輸入傳遞給第二個屏幕UI,但嘗試使用新API完成此操作時很困難,因爲我正在嘗試與其他應用程序交互。 – Smiler

+0

以下步驟對我不起作用 1.將hdmi電纜連接到手機(不確定是否也可以使用USB) 2.在root中創建設備,併發出以下命令(預期安裝應用程序)並且未看到該應用程序正在啓動一項關於二次(多顯示器功能),它只是反映了移動顯示器,因爲它是因爲連接HDMI線 亞行外殼上午開始com.Chrome.Canary --display 1 請建議其他任何方式或任何命令,使工作? – prathima

回答

2

我已通過新的連接到所述第二屏幕API的代碼如下,但目前尚無法與之交互。

Bundle bdl; 
      MediaRouter mediaRouter = (MediaRouter) mContext.getSystemService(Context.MEDIA_ROUTER_SERVICE); 
      MediaRouter.RouteInfo route = mediaRouter.getSelectedRoute(MediaRouter.ROUTE_TYPE_LIVE_VIDEO); 
      if (route != null) { 
       Display presentationDisplay = route.getPresentationDisplay(); 
       bdl = ActivityOptions.makeClipRevealAnimation(mView, left, top, width, height).setLaunchBounds(rect).setLaunchDisplayId(presentationDisplay.getDisplayId()).toBundle(); 
       Bundle optsBundle = true ? bdl : null; 
       Intent intent = new Intent(mContext, SecondaryActivity.class); 
       intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
       mContext.startActivity(intent, optsBundle); 
      } 
+0

你是什麼意思「沒有與它交互的方式」? – CommonsWare

+0

當我的鍵盤或鼠標連接到我的設備時,它只與設備自己的顯示器交互,我無法轉發該輸入設備與顯示器2上運行的應用程序進行交互。我仍在查看是否有辦法克服此問題屏障並在我的外部顯示器上啓用全功能的Android應用程序。 – Smiler

+0

這是[成文限定](https://developer.android.com/preview/api-overview.html#mds):「只有一次一個活動可以是在重新開始的狀態下,即使該應用具有多個顯示器。焦點活動處於恢復狀態;所有其他可見活動暫停,但不停止。「這與常規的多窗口沒有顯着不同。我的猜測是,類似於畫中畫,這個想法是,你在外部顯示器上放置了一些本身不需要用戶輸入的東西。 – CommonsWare

相關問題