3 回答
TA贡献1865条经验 获得超7个赞
假设您的代码位于Activity或中Fragment,请检查覆盖权限,并在必要时提出要求:
public static int OVERLAY_PERMISSION_REQ_CODE = 1234;
public void someMethod() {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}
}
然后,重新检查权限以获得更好的UX:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OVERLAY_PERMISSION_REQ_CODE) {
if (!Settings.canDrawOverlays(this)) {
// SYSTEM_ALERT_WINDOW permission not granted...
}
}
}
TA贡献1796条经验 获得超10个赞
正如CommonsWare在其博客文章中提到的那样,很少(或根本没有)有关SYSTEM_ALERT_WINDOW更改的文档。可以有一种更简单的方法,例如使用一个小对话框询问权限,但是目前,我只知道这种方法。
TA贡献1801条经验 获得超8个赞
但是此权限已被破坏。如果用户在设置中禁用此权限,并且某些服务(需要此权限)正在运行,将会发生什么?在这种情况下,由于没有上下文,因此无法通知服务关闭自身,所以我所能做的就是捕获异常。
- 3 回答
- 0 关注
- 497 浏览
添加回答
举报