小米MIUI短信权限遇到的坑
最近公司开发一个项目,需要用到短信的功能,适配华为手机一切都正常,适配小米手机,遇到了两个棘手问题:
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短信权限遇到的坑相关推荐
- MIUI通知类短信权限的坑
MIUI的坑爹设计还真不少.比如说,MIUI手机不插SIM卡就不能USB调试安装应用,好,插,结果又让你先登录小米账号(无话可说).MIUI权限申请也是坑! 就拿READ_SMS这个权限来说,按照安卓 ...
- MIUI系统获取短信权限问题
问题描述 2019年开发安卓软件的过程中(API level 28),在测试时发现在小米手机上并未弹出"获取发送短信权限"窗口,经查是小米手机的MIUI系统的封闭限制了发送短信权限 ...
- 仿小米增加短信的收藏功能
本人一直在手机ODM公司做Android开发,不是纯应用开发,和大多数Android应用开发有点区别.偶尔也会做一些系统应用上的需求开发以及个人兴趣会看看app应用和动手操作.平时的总结都是保存在本地 ...
- Android运行时权限,设置帮助类BaseActivity;电话权限,短信权限,
Android运行时权限设置帮助类BaseActivity 一.电话权限 package com.glandroid.smssen ...
- 小米手机短信拦截转发失败原因
小米手机短信拦截转发失败原因,小米手机短信拦截转发失败原因 短信的设置里面有个"系统短信优先",要把这个关闭才能你的程序才能正常监听到短信.
- 小米手机短信定位服务激活失败
博文背景 小米11手机短信定位服务激活失败 解决办法 可以进入短信界面,点击菜单键,点击进入短信设置界面,进入后点击MIUI免费网络短信,开启该功能即可. 参考链接 https://wen.baidu ...
- android 拨打电话 发送短信 权限,Android开发实现拨打电话与发送信息的方法分析...
本文实例讲述了Android开发实现拨打电话与发送信息的方法.分享给大家供大家参考,具体如下: xml布局: android:layout_width="fill_parent" ...
- Google Play通话记录和短信权限使用限制
前段时间Google Play应用中心收到了限期整改通知,记录一下之前权限适配的问题,防止后面新开项目忘记此限制. Google Play在Facebook泄密丑闻之后收紧对应用获取隐私权限的限制,凡 ...
- 在非洲运营互联网系统-自建短信猫踩的坑
短信,是我们在非洲运营系统唯一需要本地化考虑的模块,之前写<在非洲运营互联网系统-基础建设>也介绍了部分短信建设的历程,目前我们的短信方案已经成熟,这里专门分享一下,可能不是最优方案,但 ...
最新文章
- usaco Factorials
- sql挂起小工具cleanup_SQL注入的攻防策略
- 科学家研发机器人混入南极企鹅群 获“友好”对待
- mysql 层级结构查询
- 区块链基础学习(二)
- 转:android 避免内存泄露
- 谈谈asp.net中的% %,%= %,%# %%$ %的使用
- sps 2007 小问题1:人员选择器PeopleEditor如何使用
- 创建数据账号只有个别表的权限_只有普通权限账号,如何把远程数据库中该用户的数据表导入到本地数据库?...
- Spark 交互式处理上百 TB 数据
- php装curl拓展出错
- 自动寻路之 --AStar算法
- QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版
- win10系统Jmeter下载安装详解
- 物联卡代理商究竟如何选择?51物联卡告诉你正确答案
- java传纸条问题_小学生考试传纸条作弊,老师看到纸条内容,表示让人“着急”...
- input文本框与图片的对齐
- 每日一技:给女友用代码做一个3D旋转相册,每天亿遍忘记初恋~
- python协同过滤电影推荐_推荐系统:基于用户和模型的协同过滤电影推荐
- composer详解