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

时间:2024-03-23 09:48:51

做了一个可以悬浮在桌面上的火箭人,但是在进行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,"已授权");
        }
    }
}
关于Android中SYSTEM_ALAER_WINDOW在Android6.0后无法授权的问题
这样就可以了