做了一个可以悬浮在桌面上的火箭人,但是在进行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,"已授权"); } } }
这样就可以了