在之前的關於Presentation的討論中,
https://blog.csdn.net/aaajj/article/details/90575622
使用了
Display aDisplay = mDisplayManager.getDisplay(5);
的測試形式,這個5是當前的一個輔助屏的id號,可以從
dumpsys display
可以查看到模擬屏幕的信息
Logical Displays: size=2
Display 0:
mDisplayId=0
Display 5:
mDisplayId=5
mLayerStack=5
裏看到,這個id號大於0,會發生變化,比如連接hdmi顯示屏,每插拔一次,這個id就會變化(增加)。
Display aDisplay = mDisplayManager.getDisplay(5);的寫法只適用於初步調試,
可以修改爲Display aDisplay = mDisplayManager.getDisplay(0);來查看Presentation在主屏上的顯示效果。
正確的獲取Display的方法還是要用正常的方式,
調用DisplayManager的getDisplays(DisplayManager.DISPLAY_CATEGORY_PRESENTATION) 方法,
getDisplays得到系統中存在的Presentation屏幕列表,可能是wifi投屏,HDMI投屏或者虛擬顯示屏,見code,
所以我們測試Presentation的時候,可以使用開發者模式中繪圖的
Simulate secondary displays (模擬輔助顯示設備)開關
或者連接hdmi設備,比如使用type-c轉接器連接顯示器,投影儀等
創建了幾個輔助顯示設備,getDisplays就獲取到幾個,一般只會有一個,所以一般情況下取其[0]即可,這個需根據實際情況處理。
Display有getDisplayId()方法可以獲取其對應的displayId
345 public Display[] getDisplays(String category) { 346 final int[] displayIds = mGlobal.getDisplayIds(); 347 synchronized (mLock) { 348 try { 349 if (category == null) { 350 addAllDisplaysLocked(mTempDisplays, displayIds); 351 } else if (category.equals(DISPLAY_CATEGORY_PRESENTATION)) { 352 addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_WIFI); 353 addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_HDMI); 354 addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_OVERLAY); 355 addPresentationDisplaysLocked(mTempDisplays, displayIds, Display.TYPE_VIRTUAL); 356 } 357 return mTempDisplays.toArray(new Display[mTempDisplays.size()]); 358 } finally { 359 mTempDisplays.clear(); 360 } 361 } 362 }
參考資料
https://blog.csdn.net/m0_37657556/article/details/88187975