通用方法
當(dāng)前系統(tǒng)投屏監(jiān)控使用 DisplayManager.registerDisplayListener方案來獲取投屏回調(diào),并且通過判斷屏幕數(shù)量來觀察用戶是否投屏叛溢,如果lenth>1則認(rèn)為是投屏成功葵诈,如果lenth<=1 則認(rèn)為是未投屏裸弦。
回調(diào)注冊:
private void registerDisplayChange() {
dm = (DisplayManager)
getSystemService(Context.DISPLAY_SERVICE);
dm.registerDisplayListener(new DisplayManager.DisplayListener() { //屏幕添加
@Override
public void onDisplayAdded(int displayId) {
}
//屏幕刪除
@Override
public void onDisplayRemoved(int displayId) {
}
@Override
public void onDisplayChanged(int displayId) {
}
}, null);
}
獲取屏幕數(shù)量方法:
Display[] displays = displayManager.getDisplays();
length為屏幕數(shù)量
兼容
這種方案主要會有兼容問題,主要有以下幾點(diǎn):
- 第三方投屏可能再結(jié)束投屏后作喘,不會回收虛擬屏幕理疙,這個時候判斷l(xiāng)enth會失敗,可以根據(jù)第三方投屏虛擬屏幕的名稱做判斷泞坦。
- 有些特殊設(shè)備窖贤,一開始就可能有兩個屏幕,這種情況,需要配置白名單來過濾特殊設(shè)備的額外屏幕,同樣也是根據(jù)名字赃梧。
- 特殊設(shè)備屏幕錄制滤蝠,也可能觸發(fā)以上回調(diào),你也需要知道屏幕錄制的虛擬屏幕名稱做過濾授嘀。