记录一个bug,先简单介绍一下项目结构,使用了两个app,一个app是用来做投屏服务,一个app是前端显示页面。
之前投屏app都是启动服务之后就把Activity finish掉,用service来监听投屏的连接与拉起Activity播放器。
因为之前用的android版本比较低,都能够正常拉起,在android10之后,怎么都拉不起app,看了好久日志,又各种debug,最终发现是在android10之后,限制了从后台拉起Activity(一开始没往这方面想,挺尴尬的),要想通过后台拉起Activity,需要满足条件才能够启动, 官方文档介绍 https://developer.android.google.cn/guide/components/activities/background-starts?hl=zh-cn
简单来说就是不能把Activity finish掉,需要在前台里面,不然就无法拉起投屏服务
但是这又引来一个问题,我不把Activity finish掉,我怎么显示前端app呢
最终使用的解决方案是
开启投屏app显示在其他应用上层的权限
boolean hasShowPermission = Settings.canDrawOverlays(this); // 检测是否拥有显示在其他应用程序上层的权限
if (!hasShowPermission) {
// 没有权限 前往设置页面开启权限
Toast.makeText(this, "请开启app显示在其他应用程序上层权限", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
然后开启权限之后拉起前端app。
入门不久,请大家多多关照,有更好的方案欢迎大家讨论