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
*
* @return
*/
private Intent getAppDetailSettingIntent() {
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());
}
return localIntent;
}

获取到intent之后直接startactivity就好了。。。

最新文章

  1. iOS开发小技巧--判断控件是否显示在当前窗口
  2. Unity中各个平台的预编译的运用方式
  3. ListView或GridView的Adapter使用Glide加载图片异常
  4. Egret官方案例学习笔记
  5. 简单的抓取淘宝关键字信息、图片的Python爬虫|Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)
  6. bug的约束
  7. POJ 1745 Divisibility【DP】
  8. zoj 1622 Switch 开关灯 简单枚举
  9. nginx对比haproxy 的反向代理
  10. DataSet排序
  11. 51单片机引脚ALE/PROG/PSEN/EA/Vpp
  12. Cable master--hdu1551(二分法)
  13. 比较常见的const与指针的组合情况
  14. MySQL只恢复某个库或某张表
  15. 开源,免费和跨平台 - MVP ComCamp 2015 KEYNOTE
  16. Urozero Autumn 2016. NCPC 2016
  17. bridge br0 docker 网络问题 Docker Container与Docker Host
  18. pip命令无法使用
  19. Linux网络协议栈(一)——Socket入门(1)
  20. robotium之无name、ID仅有desc定位

热门文章

  1. Linux实验二报告
  2. Python积木之with
  3. MVC5 + EF6 + Bootstrap3 (10) 数据查询页面
  4. xcode更新,想想也是醉了
  5. 看别人的代码学习的css
  6. angular-input
  7. MySQL配置
  8. WebService学习过程中的心得和问题
  9. Tomcat 在win7/win8 系统下tomcat-users.xml.new(拒绝访问)解决方法
  10. neutron中的dhcp功能