Android M无法在Service弹出Dialog问题

很多文章都有介绍在Service中弹出Dialog的问题,在Service只需要给dialog添加上:ad.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);然后再在AndroidManifest.xml中添加上权限:android.permission.SYSTEM_ALERT_WINDOW,可是实践证明在6.0以上是行不通的。
 这是因为在Android 6.0以上这个SYSTEM_ALERT_WINDOW这个权限是非常危险的,在清单文件中不能申请此权限。如果要用的话,会抛出异常:

service使用dialog时抛出异常

获取方法

1.用户手动获取,Settings -> Apps -> Draw over other apps。

2.像有的软件都是自己获取的,比如从google play store下载的facebook,那是因为在play store下载的应用,google认为是受信任的,没有攻击性的,所以从play store下载的应用都是自动获取的。而从其它渠道或方式安装则不能自动获取

用代码指引用户手动获取

只需要在程序适当地方添加:

public static int ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE= 5469;//随机值
 public void testPermission() {
 if (!Settings.canDrawOverlays(this)) {
 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 
Uri.parse("package:" + getPackageName())); 
startActivityForResult(intent, ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE); } }

result:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == ACTION_MANAGE_OVERLAY_PERMISSION_REQUEST_CODE) {
 if (Settings.canDrawOverlays(this)) {
 // You have permission } }}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容