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 } }}

你可能感兴趣的:(Android M无法在Service弹出Dialog问题)