无论你觉得我写的好坏都可以在下面评论告诉我,你的支持是我继续写下去的动力,谢谢!

随着miui越来越封闭,小米对非自由渠道的应用限制越来越苛刻,我们公司的产品一半以上的用户都是来自小米,而且像我们这样的靠短信支付维持收入的游戏,短信权限默认禁止真是要了我们的命。被加入miui黑名单的游戏默认重要的权限都是禁止状态,譬如发送短信权限默认设置为禁止就直接断了我们收入来源。因此花了几个小时在网上搜索相关资料,我们不能帮助用户打开应用的权限至少我们能够引导用户去打开应用权限,并且将引导尽可能做的很简单。

资料一:跳转miui应用权限设置页面(之兼容V5/V6老版本只跳转上一级界面即可)http://www.tuicool.com/articles/jUby6rA

资料二:判断当前设备是否是小米 http://dev.xiaomi.com/doc/p=254/index.html

资料三:完整demo下载地址 http://download.csdn.net/detail/tgbus18990140382/8932881

其他废话也不多说了,直接上代码

先是通过context跳转到对应应用的权限设置页面:

/*** 跳转到应用权限设置页面 http://www.tuicool.com/articles/jUby6rA * @param context 传入app 或者 activity context,通过context获取应用packegename,之后通过packegename跳转制定应用* @return 是否是miui*/
public static boolean gotoPermissionSettings(Context context) {boolean mark = isMIUI();if ( mark ) {// 之兼容miui v5/v6  的应用权限设置页面,否则的话跳转应用设置页面(权限设置上一级页面)try {Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");localIntent.putExtra("extra_pkgname", context.getPackageName());context.startActivity(localIntent);} catch (ActivityNotFoundException e) {Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", context.getPackageName(),null);intent.setData(uri);context.startActivity(intent);}}       return mark;
}

再就是判断是否是小米的设备,官方为我们提供了一种简单方便的办法:

/*** 检查手机是否是miui* @ref http://dev.xiaomi.com/doc/p=254/index.html* @return*/
public static boolean isMIUI(){String device = Build.MANUFACTURER;System.out.println( "Build.MANUFACTURER = " + device );if ( device.equals( "Xiaomi" ) ) {System.out.println( "this is a xiaomi device" );return true;}else{return false;}
}

我们同样也可以使用类似查找activtiy的方式判断是否是miui,但是这种方式同样存在兼容的问题,不是很推荐,也附上代码供大家参考:

/*** 判断是否是miui V5/V6,老的miui无法兼容* @param context* @return*/
public static boolean isMIUIv5v6(Context context) {boolean result = false;Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");if (isIntentAvailable(context, localIntent)) {result = true;}return result;
}/*** 检查是否有这个activity* @param context* @param intent* @return*/
private static boolean isIntentAvailable(Context context, Intent intent) {PackageManager packageManager = context.getPackageManager();List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);return list.size() > 0;
}

以下是完整的代码,可以直接使用的类:

public class SetMiuiPermission {/*** 跳转到应用权限设置页面 http://www.tuicool.com/articles/jUby6rA * @param context 传入app 或者 activity context,通过context获取应用packegename,之后通过packegename跳转制定应用* @return 是否是miui*/public static boolean gotoPermissionSettings(Context context) {boolean mark = isMIUI();if ( mark ) {// 之兼容miui v5/v6  的应用权限设置页面,否则的话跳转应用设置页面(权限设置上一级页面)try {Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");localIntent.putExtra("extra_pkgname", context.getPackageName());context.startActivity(localIntent);} catch (ActivityNotFoundException e) {Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", context.getPackageName(),null);intent.setData(uri);context.startActivity(intent);}}       return mark;}/*** 检查手机是否是miui* @ref http://dev.xiaomi.com/doc/p=254/index.html* @return*/public static boolean isMIUI(){String device = Build.MANUFACTURER;System.out.println( "Build.MANUFACTURER = " + device );if ( device.equals( "Xiaomi" ) ) {System.out.println( "this is a xiaomi device" );return true;}else{return false;}        }/*** 判断是否是miui V5/V6,老的miui无法兼容* @param context* @return*/public static boolean isMIUIv5v6(Context context) {boolean result = false;Intent localIntent = new Intent("miui.intent.action.APP_PERM_EDITOR");localIntent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");if (isIntentAvailable(context, localIntent)) {result = true;}return result;}/*** 检查是否有这个activity* @param context* @param intent* @return*/private static boolean isIntentAvailable(Context context, Intent intent) {PackageManager packageManager = context.getPackageManager();List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES);return list.size() > 0;}
}

以上函数的入口为:gotoPermissionSettings,传入当前application的context即可条状到当前应用的权限设置页面。

MIUI应用权限设置相关推荐

  1. android app没有读写权限设置,Android 6.0以上权限拒绝打开权限设置界面的解决方法...

    本人使用小米手机,打开qq或者微信的时候,某个权限拒绝的话,会提示你开启,点击开启会跳转到app的权限设置界面,当然了,这是国内系统深层定制的原因,也就是说这个界面原声的android没有的!这里以小 ...

  2. Android调用miui给权限,Android 11+MIUI12,APP任意获取用户隐私的路子被封死

    在经历了多个测试版本的迭代和完善之后,安卓11终于来到了用户面前,作为目前全球用户数量最大的操作系统,安卓每一次大版本更新都会为用户带来很多新功能,新体验以及全新的设计系统,底层升级和变化也会一定程度 ...

  3. Android 权限被拒绝,跳转至权限设置界面

    参考博客:Android跳转权限设置页面 本文基于上面博客进行封装,直接上代码: import android.content.ComponentName; import android.conten ...

  4. 360 android 权限管理,各机型关于360手机卫士所需相关权限设置教程

    本帖最后由 若丶冰崶 于 2015-1-2 10:51 编辑 Hi,小伙伴们 近期我们持续接到用户反馈,使用360手机卫士后,出现无法正常拨打电话发送短信.不能正常显示通话记录.联系人和短信.悬浮窗无 ...

  5. android权限设置在哪找,Android权限申请与打开权限设置页面

    前言 应用的使用需要申请权限,但是如果用户禁用掉,或者禁用并不再提醒就必须到系统设置中开启. // 权限 implementation 'com.yanzhenjie:permission:2.0.3 ...

  6. Android调app权限设置界面(适配各大手机厂商终极版本)

    背景: 众所周知,国内的android是在google之上,各大手机厂商加了一层,诸如MIUI.EUI,之类的系统.因此在我们开发过程中想调出某应用的权限设置页面,调出的是google原生的权限控制界 ...

  7. android 权限管理适配 oppo,Android调app权限设置界面(适配各大手机厂商终极版本)...

    背景: 众所周知,国内的android是在google之上,各大手机厂商加了一层,诸如MIUI.EUI,之类的系统.因此在我们开发过程中想调出某应用的权限设置页面,调出的是google原生的权限控制界 ...

  8. Android 跳转应用权限设置页面 适配小米系统

    跳转应用设置页面方便用户修改已拒绝的权限,是经常遇到的需求,但是MIUI 8 系统上测试发现有坑,写一篇文章记录一下. 通常的跳转应用设置页面方法 Intent intent = new Intent ...

  9. Android 6.0动态权限及小米(MIUI)权限的特殊处理

    前言 常规操作权限的页面及流程 权限说明 权限授取流程 小米权限特殊处理 各个android操作系统跳转到设置页面的公共方法 总结 前言 从android6.0之后,android对用户的权限进行相对 ...

最新文章

  1. linux端口找进程,Linux查看端口、进程情况及kill进程的方法
  2. R语言与数据分析(2)-R语言简介
  3. accesskey 提交
  4. 解决cmd命令查看python版本“python不是内部命令或外部命令,也不是可执行程序解决方案”的问题
  5. avoid error when import AssemblyKeyFile
  6. 4月22日(牛马不对嘴)
  7. mysql 列目录_Linux ls命令:查看目录下文件
  8. 【DP】HDU 2189 悼念512汶川大地震遇难同胞——来生一起走
  9. 基于java的信访项目_基于JAVA的某省人大信访信息系统的设计与实现
  10. 写一个简单易用可扩展vue表单验证插件(vue-validate-easy)
  11. 代码阅读 | 孪生网络目标跟踪的尺度(Scale)计算 (In ATOM)
  12. 计算机专业英语2013单词翻译,计算机专业英语课后单词翻译
  13. 千山独行-一个人的创业路(连载十二)
  14. linux 设置 用户 密码,Linux系统怎么设置开机密码?Linux设置开机密码的方法
  15. Oracle 还原数据库
  16. 尝试用Unity还原蔚蓝(Celeste)—— 真·操控、移动、手感篇
  17. 为何优秀的程序员不断离开?,阿里P8架构师
  18. 数据资产管理实践白皮书(5.0版)
  19. remove 删除文件
  20. KeyNote NF

热门文章

  1. iOS自定义简易刷新视图(仿MJRefresh)
  2. [CommunityServer]事件代理
  3. javaScript-进阶篇(三)
  4. Spring MVC - 配置Spring MVC
  5. 巧妙设置Android来方便管理Linux和Windows
  6. Exchange禁用中继后仍然被中继的处理方法
  7. grpc使用记录(一) gRPC编译(mscv/gcc)
  8. 为什么 React Elements 会有 $$typeof 这个属性?
  9. htop 比top更好用的top
  10. AsyncTask工作机制简介