申請權限:
private static final int PermissionRequestCode = 10;
Intent intent = new Intent();
intent.setAction(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, PermissionRequestCode);
獲取是否開通:
Handler mHandler;
@Override
protected void onActivityResult(final int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mHandler == null){
mHandler = new Handler(Looper.getMainLooper());
}
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && requestCode == PermissionRequestCode){
boolean nOpen = Settings.canDrawOverlays(XXXActivity.this);
if (nOpen){
//開啓
}else {
//關閉
}
Log.e("PermissionRequest", "open = " + nOpen);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && requestCode == PermissionRequestCode){
AppOpsManager appOpsMgr = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), getPackageName());
if (mode == 1 || mode == 0){
//權限已開起
}else if (mode == 2){
//權限已關閉
}
Log.e("PermissionRequest", "mode = " + mode);
//此方法不可行,親測華爲8.0手機 未申請狀態時 也返回1
}
}
}, 500);
}
根據https://www.jianshu.com/p/2d35c0c7316a所說,獲取權限與activity生命週期有關,google的問題?
表示不理解,反正延時0.5秒再獲取,就對了。
直接獲取的話,得到的結果是仍然沒有開通權限。