Android 判断应用程序获取通知栏权限是否开启,以及如何跳转到应用程序设置界面

阅读数:8926

Android如何判断通知栏权限是否开启:

     起先我是想通过app手动检测权限是否开启,进行动态设置及:

     

 
  1. //检测权限是否开启

  2. ContextCompat.checkSelfPermission()

  3. //设置权限

  4. ActivityCompat.requestPermissions();

但是我查阅的好些资料,都没有查到其权限名是什么,貌似没有。无奈只有放弃这种方式

检测通知栏权限是否开启

 
  1. @RequiresApi(api = Build.VERSION_CODES.KITKAT)

  2. private boolean isNotificationEnabled(Context context) {

  3.  
  4. String CHECK_OP_NO_THROW = "checkOpNoThrow";

  5. String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

  6.  
  7. AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);

  8. ApplicationInfo appInfo = context.getApplicationInfo();

  9. String pkg = context.getApplicationContext().getPackageName();

  10. int uid = appInfo.uid;

  11.  
  12. Class appOpsClass = null;

  13. /* Context.APP_OPS_MANAGER */

  14. try {

  15. appOpsClass = Class.forName(AppOpsManager.class.getName());

  16. Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,

  17. String.class);

  18. Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);

  19.  
  20. int value = (Integer) opPostNotificationValue.get(Integer.class);

  21. return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);

  22.  
  23. } catch (Exception e) {

  24. e.printStackTrace();

  25. }

  26. return false;

  27. }


当通知栏权限未开启时跳转到自身的设置界面

 
  1. private void toSetting() {

  2. Intent localIntent = new Intent();

  3. localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

  4. if (Build.VERSION.SDK_INT >= 9) {

  5. localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");

  6. localIntent.setData(Uri.fromParts("package", getPackageName(), null));

  7. } else if (Build.VERSION.SDK_INT <= 8) {

  8. localIntent.setAction(Intent.ACTION_VIEW);

  9. localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");

  10. localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());

  11. }

  12. startActivity(localIntent);

  13. }

 
 

猜你喜欢

转载自blog.csdn.net/xiaozhude/article/details/81557559