阅读数:8926
Android如何判断通知栏权限是否开启:
起先我是想通过app手动检测权限是否开启,进行动态设置及:
-
//检测权限是否开启
-
ContextCompat.checkSelfPermission()
-
//设置权限
-
ActivityCompat.requestPermissions();
但是我查阅的好些资料,都没有查到其权限名是什么,貌似没有。无奈只有放弃这种方式
检测通知栏权限是否开启
-
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
-
private boolean isNotificationEnabled(Context context) {
-
String CHECK_OP_NO_THROW = "checkOpNoThrow";
-
String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
-
AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
-
ApplicationInfo appInfo = context.getApplicationInfo();
-
String pkg = context.getApplicationContext().getPackageName();
-
int uid = appInfo.uid;
-
Class appOpsClass = null;
-
/* Context.APP_OPS_MANAGER */
-
try {
-
appOpsClass = Class.forName(AppOpsManager.class.getName());
-
Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,
-
String.class);
-
Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
-
int value = (Integer) opPostNotificationValue.get(Integer.class);
-
return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
return false;
-
}
当通知栏权限未开启时跳转到自身的设置界面
-
private void toSetting() {
-
Intent localIntent = new Intent();
-
localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
if (Build.VERSION.SDK_INT >= 9) {
-
localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
-
localIntent.setData(Uri.fromParts("package", getPackageName(), null));
-
} else if (Build.VERSION.SDK_INT <= 8) {
-
localIntent.setAction(Intent.ACTION_VIEW);
-
localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
-
localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());
-
}
-
startActivity(localIntent);
-
}