通用方法
当前系统投屏监控使用 DisplayManager.registerDisplayListener方案来获取投屏回调,并且通过判断屏幕数量来观察用户是否投屏,如果lenth>1则认为是投屏成功,如果lenth<=1 则认为是未投屏。
回调注册:
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);
}
获取屏幕数量方法:
Display[] displays = displayManager.getDisplays();
length为屏幕数量
兼容
这种方案主要会有兼容问题,主要有以下几点:
- 第三方投屏可能再结束投屏后,不会回收虚拟屏幕,这个时候判断lenth会失败,可以根据第三方投屏虚拟屏幕的名称做判断。
- 有些特殊设备,一开始就可能有两个屏幕,这种情况,需要配置白名单来过滤特殊设备的额外屏幕,同样也是根据名字。
- 特殊设备屏幕录制,也可能触发以上回调,你也需要知道屏幕录制的虚拟屏幕名称做过滤。
网友评论