MIUI的坑爹设计还真不少。比如说,MIUI手机不插SIM卡就不能USB调试安装应用,好,插,结果又让你先登录小米账号(无话可说)。MIUI权限申请也是坑!

就拿READ_SMS这个权限来说,按照安卓规范来动态申请,它不弹窗让用户允许,然后回调却是成功的,到设置里一看,该权限还是询问状态。这什么逻辑啊!
然后想实现自动填短信验证码,不好意识,我MIUI自定义了一个通知类短信权限(Service_SMS),你不知道怎么申请,也不知道怎么在manifest注册。所以你没有权,也限监听不到的。我也不知道这个权限完整的名字叫什么,看设置里只有两种状态(没有询问,估计也没法动态申请)。

目前有一种方案就是你引导用户去开启,但是现在短信都是通知条的形式,还会有个复制按钮,这样做其实多此一举,但如果是其他敏感权限或许有这么做的价值。如下:
1、首先判断系统是不是MIUI,然后在需要的Activity调用goPermissionSettings(Activity activity);
2、在相应activity重写onActivityResult,根据request_code,回调就直接执行需要用到权限的业务代码。但是用户到底给了权限没,其实也没法判断,只能“盲调”(自己创的一个词)需要权限的代码,所以需要try/catch一下,崩了就说明没有权限,没问题就说明给了权限。
3、可以用sharePreference记录下授权状态,不用每次都引导下(但这样还是可能出现用户给过权限后又手动关掉的情况)。上面的try/catch很重要啊,catch里可以做些处理,再引导一次或者你还有其他想法。

public class MiuiUtils {private MiuiUtils() {throw new UnsupportedOperationException("u can't instantiate me...");}private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";public static final int REQUEST_CODE_SERVICE_SMS = 100;/*** @return whether or not is MIUI* @link http://dev.xiaomi.com/doc/p=254/index.html*/public static boolean isMIUI() {String device = Build.MANUFACTURER;LogUtils.v("Build.MANUFACTURER = " + device);if (device.equals("Xiaomi")) {Properties prop = new Properties();try {prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));} catch (IOException e) {e.printStackTrace();return false;}return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;} else {return false;}}public static void goPermissionSettings(Activity context) {Intent intent;try {//MIUI8/9intent = new Intent("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.PermissionsEditorActivity");intent.putExtra("extra_pkgname", context.getPackageName());context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);} catch (ActivityNotFoundException e) {try {//MIUI5/6intent = new Intent("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter","com.miui.permcenter.permissions.AppPermissionsEditorActivity");intent.putExtra("extra_pkgname", context.getPackageName());context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);} catch (ActivityNotFoundException e1) {//应用信息界面intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", context.getPackageName(),null);intent.setData(uri);context.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);;}}}
}

给个有用的ADB命令.可以获取当前Activity的信息,不然你以为,是怎么知道上面goPermissionSettings(Activity activity)方法里,跳转到MIUI权限设置的Activity的包名和完整类名的:

adb shell dumpsys activity | findstr "mFocusedActivity"

MIUI通知类短信权限的坑相关推荐

  1. OPPO手机无法读取通知类短信

    问题描述: OPPO手机无法读取通知类短信 解决方法: 在短信>短信设置里面>打开禁止后台应用读取验证码

  2. MIUI系统获取短信权限问题

    问题描述 2019年开发安卓软件的过程中(API level 28),在测试时发现在小米手机上并未弹出"获取发送短信权限"窗口,经查是小米手机的MIUI系统的封闭限制了发送短信权限 ...

  3. 网易云信-网易验证码短信,网易通知类短信的使用

    短信验证码是网站必不可少的,基本每个公司都会用到,之前用的短信验证码是互易无线的,现在新公司又使用了网易云信的短信验证, 这些平台的使用基本都类似,都是基于curl请求 这次我就记录下我对网易云信验证 ...

  4. 小米MIUI短信权限遇到的坑

    最近公司开发一个项目,需要用到短信的功能,适配华为手机一切都正常,适配小米手机,遇到了两个棘手问题: 1.小米MIUI有个通知类短信权限,这个权限不知道如何申请,不知道如何判断是否具有该权限: 2.业 ...

  5. Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,

                                      Android运行时权限设置帮助类BaseActivity  一.电话权限 package com.glandroid.smssen ...

  6. 验证码短信接口可以广泛应用在网站会员手机验证、APP应用手机验证、订单通知、物流提醒等触发类短信应用。

    应用范围 验证码短信接口可以广泛应用在网站会员手机验证.APP应用手机验证.订单通知.物流提醒等触发类短信应用. 手机短信验证码技术实现 1.用户填写自己的手机号码,点击"获取验证码&quo ...

  7. 增值类短信业务图文简介

    以前一提到短信(Short Message),人们会想到"拇指族(在社交移动APP诞生前,专指用手机高频发短信的一个群体)"."拜年短信".现在再提到短信,人们 ...

  8. 工信部开展端口类短信群发业务清理整顿专项行动

    工信部发布<关于组织开展端口类短信群发业务清理整顿专项行动的通知>,通知称为进一步巩固前一阶段垃圾短信治理的成果,及时解决当前工作中出现的新问题,决定在全行业开展为期3个月的端口类短信群发 ...

  9. 记录对接移动Mas平台发送短信踩的坑

    记录对接移动Mas平台发送短信踩的坑 1.首先吐槽一下,移动云Mas平台的接口文档写的真辣鸡 2.第一步,在已经注册完申请过云Mas平台账号之后,登录:移动云Mas平台. 3.登录之后找到 管理 - ...

最新文章

  1. nodejs高版本转低版本
  2. 讲你肯定能懂的机器学习多维极值求解 1
  3. java中输出系统时间
  4. 【Python CheckiO 题解】Roman Numerals
  5. python实现两个接口的依赖关系
  6. 背景图宽度自适应及背景图合并的CSS思想
  7. Undelete Plus 2.53
  8. 图文并茂带你迅速了解本科、硕士、博士的区别
  9. 测试工程师常见的算法面试题
  10. Unity DOTween插件和iTween插件使用(笔记)
  11. STM32F103基于HAL库移植uC/OS-III
  12. 我的第一篇博客--成长的第一站
  13. Android 显示文字超过指定长度部分使用省略号表示
  14. 55、如何制作API
  15. ガラムバレル / 泰坦
  16. 详解ip地址和mac地址即ARP协议
  17. Android面试知识库,线程和进程的区别【Android面试送命题】
  18. 怎么把做好的网页用deramweaver传上互联网 空间和域名怎么申请
  19. 838计算机考研用书,河海计算机838考研大纲(5页)-原创力文档
  20. 神经网络模型入门及蠓虫分类问题简单实战

热门文章

  1. vue项目中嵌入软键盘(中文/英文)
  2. Doris1.1.1多种异构数据源数据导入方案
  3. freeswitch-PSTN
  4. 无人机编程donekit及通讯(一)
  5. python猴子吃桃问题_用Python解决猴子吃桃问题
  6. 搭建asp会议签到系统 第四章 会议统计
  7. Detecting Faces in Images: A Survey( 翻译)
  8. java 金额的大小写转换类
  9. CentOS8安装Docker服务
  10. java如何处理excel的读取