最近公司开发一个项目,需要用到短信的功能,适配华为手机一切都正常,适配小米手机,遇到了两个棘手问题:

1.小米MIUI有个通知类短信权限,这个权限不知道如何申请,不知道如何判断是否具有该权限;

2.业务要求在引导页弹短信读取权限的弹窗让用户授权(这个是其他手机正常的流程),小米MIUI读取短信权限READ_SMS,动态申请后不弹窗,但是会走onRequestPermissionsResult的回调,而且回调值是PERMISSION_GRANTED,去权限设置页面查看该权限其实是询问状态;

第一个问题:解决办法是手动引导用户去设置页面开启,一般引导页只会走一次,这个权限是否开启目前没法判断,看过其他的例如来电类app, 有些权限也无法判断是否开启了,做法是弹窗让用户选择是否已开启。

小米跳权限设置页代码如下:

 public static void goPermissionSettings(Activity activity) {if (isMIUI()) {Intent intent;intent = new Intent("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.PermissionsEditorActivity");intent.putExtra("extra_pkgname", activity.getPackageName());if (PhoneUtil.isIntentAvailable(intent, activity)) {activity.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);} else {intent = new Intent("miui.intent.action.APP_PERM_EDITOR");intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");intent.putExtra("extra_pkgname", activity.getPackageName());if (PhoneUtil.isIntentAvailable(intent, activity)) {activity.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);} else {intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);Uri uri = Uri.fromParts("package", activity.getPackageName(), null);intent.setData(uri);activity.startActivityForResult(intent, REQUEST_CODE_SERVICE_SMS);}}}}/*** 判断是否是小米机型* @return*/public static boolean isMIUI() {if (isMiui == null) {isMiui = !TextUtils.isEmpty(getSystemProperty("ro.miui.ui.version.name"));}return isMiui;}public static String getSystemProperty(String propName) {String line;BufferedReader input = null;try {Process p = Runtime.getRuntime().exec("getprop " + propName);input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);line = input.readLine();input.close();} catch (IOException ex) {Log.e(TAG, "Unable to read sysprop " + propName, ex);return null;} finally {if (input != null) {try {input.close();} catch (IOException e) {Log.e(TAG, "Exception while closing InputStream", e);}}}return line;}/*** 判断是否存在可用的跳转意图*/public static boolean isIntentAvailable(Intent intent, Context context) {if (intent == null || context == null || context.getPackageManager() == null) {return false;}return context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0;}

第二个问题:小米MIUI其实有一套自己的权限管理,叫AppOpsManager,Google把它隐藏了没有开放出来,这个权限管理比现有的权限优先级更高。AppOpsManager可以跳过一些流氓软件的限制。比如应用需要开启某一个敏感权限,如果你拒绝了,应用就会不让你进去或者一直弹窗提醒。  利用AppOpsManager可以判断读取短信的权限是开启还是拒绝还是询问。不过最坑的是就是虽然你判断出它是具体是什么状态了,你还是没法让它弹窗授权。

不过我发现了一个问题,小米MIUI弹出短信读读取的时机是当应用真正去读短信的时候触发。Ps:前提是你申请了读取短信权限。 所以我们可以这样做:在第一次申请读取短信权限的回调里去真正读一次短信操作,这个时候你会发现读取短信的弹窗弹起来了,后面就是正常流程了。补充一点,小米的读取短信权限如果手动拒绝了,下次再用这种方式也是不弹窗的,只能手动引导用户打开读取短信的权限了。

总结:小米MIUI真是太坑了!

小米MIUI短信权限遇到的坑相关推荐

  1. MIUI通知类短信权限的坑

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

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

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

  3. 仿小米增加短信的收藏功能

    本人一直在手机ODM公司做Android开发,不是纯应用开发,和大多数Android应用开发有点区别.偶尔也会做一些系统应用上的需求开发以及个人兴趣会看看app应用和动手操作.平时的总结都是保存在本地 ...

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

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

  5. 小米手机短信拦截转发失败原因

    小米手机短信拦截转发失败原因,小米手机短信拦截转发失败原因 短信的设置里面有个"系统短信优先",要把这个关闭才能你的程序才能正常监听到短信.

  6. 小米手机短信定位服务激活失败

    博文背景 小米11手机短信定位服务激活失败 解决办法 可以进入短信界面,点击菜单键,点击进入短信设置界面,进入后点击MIUI免费网络短信,开启该功能即可. 参考链接 https://wen.baidu ...

  7. android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...

    本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...

  8. Google Play通话记录和短信权限使用限制

    前段时间Google Play应用中心收到了限期整改通知,记录一下之前权限适配的问题,防止后面新开项目忘记此限制. Google Play在Facebook泄密丑闻之后收紧对应用获取隐私权限的限制,凡 ...

  9. 在非洲运营互联网系统-自建短信猫踩的坑

    ​短信,是我们在非洲运营系统唯一需要本地化考虑的模块,之前写<在非洲运营互联网系统-基础建设>也介绍了部分短信建设的历程,目前我们的短信方案已经成熟,这里专门分享一下,可能不是最优方案,但 ...

最新文章

  1. usaco Factorials
  2. sql挂起小工具cleanup_SQL注入的攻防策略
  3. 科学家研发机器人混入南极企鹅群 获“友好”对待
  4. mysql 层级结构查询
  5. 区块链基础学习(二)
  6. 转:android 避免内存泄露
  7. 谈谈asp.net中的% %,%= %,%# %%$ %的使用
  8. sps 2007 小问题1:人员选择器PeopleEditor如何使用
  9. 创建数据账号只有个别表的权限_只有普通权限账号,如何把远程数据库中该用户的数据表导入到本地数据库?...
  10. Spark 交互式处理上百 TB 数据
  11. php装curl拓展出错
  12. 自动寻路之 --AStar算法
  13. QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版
  14. win10系统Jmeter下载安装详解
  15. 物联卡代理商究竟如何选择?51物联卡告诉你正确答案
  16. java传纸条问题_小学生考试传纸条作弊,老师看到纸条内容,表示让人“着急”...
  17. input文本框与图片的对齐
  18. 每日一技:给女友用代码做一个3D旋转相册,每天亿遍忘记初恋~
  19. python协同过滤电影推荐_推荐系统:基于用户和模型的协同过滤电影推荐
  20. composer详解

热门文章

  1. 一文看尽深度学习中的20种卷积
  2. 手动修改净化迅雷 彻底去除所有广告
  3. 迅雷下不了php文件怎么打开方式,迅雷下载php文件怎么打开(浏览器打开php文件)...
  4. 科学计算机的盖子,小班科学活动瓶子和盖子教案
  5. 五维空间理论的起源与发展
  6. 怎么在编辑器上将CAD转换成PDF格式后保存桌面?
  7. JavaScript函数录入成绩
  8. 韩国牛奶进口税率及进口牛奶那些流程事项2021-08-19
  9. labelme批量制作数据集教程
  10. html中批量导入功能,雨课堂中批量导入的详细操作方法