我创建了一个在后台连续运行并显示浮动叠加TextView的应用程序(通过使用权限android.permission.SYSTEM_ALERT_WINDOW)。
我在联想Android设备上遇到问题,当其他应用程序尝试请求用户权限时,会出现一个警告对话框,显示"屏幕覆盖已检测到"。虽然我在Redmi 3S Prime设备上测试了相同的应用程序"允许"在我的应用程序中关闭了浮动叠加TextView之前,权限对话框中的按钮是不可点击的。
有解决此设备特定问题的解决方案吗?其中一个可能的解决方案可能是禁用浮动TextView,同时权限对话框对用户可见,并在关闭权限对话框时显示浮动叠加,但问题是如何从我的应用程序检测其他前台应用程序的权限对话框打开/关闭状态。
请建议......
答案 0 :(得分:4)
不幸的是,这似乎是Android操作系统固有的,据我所知,没有办法检测其他应用程序何时请求权限。与其他应用程序交互的一般流程是以推送方式向它们发送意图,因此理论上如果其他应用程序向您的应用程序发送意图以禁用覆盖图,则可以完成,尽管这是不是一个实际的解决方案。
我可能完全错了,但我还没有看到这个问题的程序化解决方案。您可能做的最好的事情是警告您的用户您的应用可能会导致此问题,并为他们提供快速临时禁用按钮。
答案 1 :(得分:2)
如何从我的应用程序中检测权限对话框打开/关闭状态?
下面提到的实施方法,在第一个活动的onCreate上运行此检查
public final static int PERM_REQUEST_CODE_DRAW_OVERLAYS = 1234;
/ ** *绘制叠加/在其他应用上的权限,与
相关' android.permission.SYSTEM_ALERT_WINDOW'
Settings.ACTION_MANAGE_OVERLAY_PERMISSION
&安培; *以
的形式添加URI"软件包:"
将用户直接发送到您应用的页面。
注意:替代忽略URI以将用户发送到完整的应用列表。
public void permissionToDrawOverlays() {
if (android.os.Build.VERSION.SDK_INT >= 23) { //Android M Or Over
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, PERM_REQUEST_CODE_DRAW_OVERLAYS);
}
}
}
调用活动,检查设置
中返回的用户操作结果 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PERM_REQUEST_CODE_DRAW_OVERLAYS) {
if (android.os.Build.VERSION.SDK_INT >= 23) { //Android M Or Over
if (!Settings.canDrawOverlays(this)) {
// ADD UI FOR USER TO KNOW THAT UI for SYSTEM_ALERT_WINDOW permission was not granted earlier...
}
}
}
}
注意:以上代码和摘录摘自gist。
希望这有助于!!! ..
答案 2 :(得分:2)
从设备中清除Es explorer的数据,然后重新启动设备。
答案 3 :(得分:1)
我认为这两个链接可以帮到你。 firstlink secondlink
答案 4 :(得分:0)
尝试用于调试版本 - targetSdkVersion 22。
签名APK(对于所有targetSdkVersion(s))应用程序将正常工作。