相信做过Android的都知道,现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框。
而且用户一旦不小心点了拒绝,下次就不再询问了,而很多小白用户也不知道怎么去设置。这就导致了很不好的用户体验。
经过研究,我发现像小米,魅族,这些满大街的系统,都是可以通过隐式意图打开权限设置页面的。
这里指的是自身app的权限管理页面
之前已经有人写过类似的文章,不过都比较分散,我这里把这些方法总结了一下。
不多说,直接上代码。
首先是最蛋疼的小米,百度了很多前辈留下的方法,发现都不能打开,没有办法,只能通过 adb dumpsys activity activities 命令去查看
经过一番研究终于打开了。

/**  * 跳转到miui的权限管理页面  */  private void gotoMiuiPermission() {      Intent i = new Intent("miui.intent.action.APP_PERM_EDITOR");      ComponentName componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");      i.setComponent(componentName);      i.putExtra("extra_pkgname", getPackageName());      try {          startActivity(i);      } catch (Exception e) {          e.printStackTrace();          gotoMeizuPermission();      }  }  

接下来上魅族的代码

/**  * 跳转到魅族的权限管理系统  */  private void gotoMeizuPermission() {      Intent intent = new Intent("com.meizu.safe.security.SHOW_APPSEC");      intent.addCategory(Intent.CATEGORY_DEFAULT);      intent.putExtra("packageName", BuildConfig.APPLICATION_ID);      try {          startActivity(intent);      } catch (Exception e) {          e.printStackTrace();          gotoHuaweiPermission();      }  }  

华为的系统由于不太一样,有些系统是华为自己的权限管理,而6.0的是用的原生的权限管理页面,目前手上只有一台6.0的华为手机,
暂时没有研究到打开的方法,如果有知道的大神麻烦告知一下
不过打不开没关系,我们可以退而求其次,打开所用应用的权限管理页面

/**  * 华为的权限管理页面  */  private void gotoHuaweiPermission() {      try {          Intent intent = new Intent();          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);          ComponentName comp = new ComponentName("com.huawei.systemmanager", "com.huawei.permissionmanager.ui.MainActivity");//华为权限管理          intent.setComponent(comp);          startActivity(intent);      } catch (Exception e) {          e.printStackTrace();          startActivity(getAppDetailSettingIntent());      }  }  

目前也就研究了这三大系统,对于原生系统,和其他系统,如果找不到方法,也可以先把用户引导到系统设置页面

/**  * 打开应用详情页面intent  */  private Intent gotoAppDetailSettingIntent() {      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.settings.InstalledAppDetails");          localIntent.putExtra("com.android.settings.ApplicationPkgName", getPackageName());      }      startActivity(localIntent); } 

更多相关文章

  1. Android浏览器Browser二次开发(二)支持WML
  2. 12个被滥用的Android应用程序权限
  3. 关于Android(安卓)4.4 后没有WRITE_SMS权限以及指定Android(安卓
  4. BlackHole开发日志-尝试基于Android的DNS服务器
  5. Enhanced Security Solution in Android
  6. Android:Clipboard剪切板简单的使用
  7. Android踩坑日记:Android动态权限分析和解决方案
  8. 广播+ Service详解、通知和权限-Android基础知识整理
  9. Android的安全性和权限

随机推荐

  1. Android(安卓)Systrace
  2. android 模拟器 使用SD卡
  3. Base64编解码Android和ios的例子,补充JNI
  4. Android安全机制解析与应用实践
  5. Android开机广播和关机广播
  6. android源代码编译
  7. BiliBili-IJKPlayer播放器源码分析(一)
  8. Android(安卓)NDK 编译、使用动态库
  9. Android(安卓)Activity 及其子类
  10. Android学习笔记(2):Hello world