关于Android中SYSTEM_ALAER_WINDOW在Android6.0后无法授权的问题

做了一个可以悬浮在桌面上的火箭人,但是在进行SYSTEM_ALERT_WINDOW授权时却一直没能成功,刚开始用的是ActivityCompat.requestPemissions的方法来进行授权,代码如下:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SYSTEM_ALERT_WINDOW)
        != PackageManager.PERMISSION_GRANTED){
    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.SYSTEM_ALERT_WINDOW},1);}

这样不能够弹出权限选择对话框,后来查看文档后得知,该权限不能够不能通过代码申请方式获取,必须得用户打开软件设置页手动打开,才能授权。路径是:Settings->Apps->App Setting->Draw over other apps . 然后手动打开应用的此权限。Manifest申请该权限是无效的。

注意:

  • 预置应用应该是可以默认使用该权限的(经验说:预置应用默认开启所需要的权限,就算在apps->permission中显示的权限默认是关闭的)。
  • 通过Google Play Store(Version 6.05 or heigher is required)下载的需要该权限的应用,会被自动授予该权限


解决方法:

private void settingPemisson(){
    Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + MainActivity.this.getPackageName()));
    startActivityForResult(intent, 1);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1){
        if (!Settings.canDrawOverlays(this)){
            ToastUtils.showToast(this,"权限未开放");
        }else {
            ToastUtils.showToast(this,"已授权");
        }
    }
}
这样就可以了


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值