【原创】android 7.0 通知报错 java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group
项目中在后台发送通知,突然某一天测出在Android 7.0上通知发送失败,那么根据提示,我们尝试加了MANAGE_USERS权限,看起来是个系统级别权限,验证后果然无效。接着在搜索后都无果,似乎大家都没遇到过,很是诡异。
从报错看可能跟系统用户有关,也许关联了什么权限没有获得。开始只能通过try/catch, 这样在前台可以收到消息。那在后台还是有问题。
开始我有几个怀疑点:
1、7.0 修改了Notification的构建方式。 但查看api更新说明,没有提及。
2、当时测出问题是在Nexus6, 从这个权限名来看 MANAGE_USERS,怀疑与系统的用户管理权限有关。
后来经过很长时间终于找到这个问题的根本原因。
首先重建一个Demo在7.0上测试一切正常,说明很有可能是我们自己工程的问题,后来发现在自定义的MyApplication有一个方法叫getUserId(), 而在Notification构建时发现竟然有一个相同的方法:
sdk 24(7.0代码):


由于这个Context 在Builder构造的时候传的是Application context, 所以很大可能就是和系统方法冲突了。
但是我又看了下,7.0以前的代码也有同样的方法,只是位置略有不同,至此还是不能解释为什么只有7.0有问题。
sdk 23:

然后我又找出手机对应的代码版本,7.0.0_r1, 有一段提交记录:


正是由于加了 callingUserId != userId 这个权限判断,才会抛出这个异常,虽然系统通知的流程我不太熟,但至此已经可以确认此问题的根本原因。
所以这个bug很巧,只有在7.0上,你的代码里有这个方法的时候才会出现。那么改法就比较简单了,修改自己的方法即可。
【原创】android 7.0 通知报错 java.lang.SecurityException: You need MANAGE_USERS permission to: check if specified user a managed profile outside your profile group的更多相关文章
- Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错
下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...
- 我的Android进阶之旅------>解决DownloadManager报错java.lang.SecurityException: Invalid value for visibility: 2
1.问题描述 今天使用Android系统的DownloadManager进行下载操作时,爆了如下所示的错误: java.lang.RuntimeException: Unable to start s ...
- resin-pro-4.0.53报错java.lang.Error: java.lang.ClassNotFoundException: com.caucho.loader.SystemClassLoader
最初并未发现,笔者的系统环境变量JAVA_HOME变量设置错误 D:\develop\Java\x64\jdk1.8.0_144 #最初使用了阉割版的JDK 改成完整安装的JDK就可以 D:\deve ...
- 我的Android进阶之旅------>Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed.【转】
本文转载自:http://blog.csdn.net/ouyang_peng/article/details/48048975 今天在调用MediaRecorder.stop(),报错了,java.l ...
- 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT
最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...
- 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"
在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...
- 反射报错java.lang.IllegalArgumentException: wrong number of arguments
class Person{ private String name ; private String sex ; public Person(){ System.out.println("c ...
- spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext
spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext 学习了: http ...
- eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo
报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...
- 开着idea,死机了,关机重启。重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification
开着idea,死机了,关机重启.重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification. goo ...
随机推荐
- sql server 与mysql差异(innodb)
MySQL SQL SERVER CHAR_LENGTH(str) LEN(character_expression) CONCAT(str1,str2,...) str1+str2 INSERT(s ...
- mysql 删除商品名字重复数据,同时保留最新一条
delete goods where goods_id in (SELECT goods_id FROM goodswhere goods_name in (select goods_name fro ...
- javax.naming.NameNotFoundException: Name [aa.bb.cc/xx] is not bound in this Context. Unable to find [aa.bb.cc]
今天尝试把一个SpringBoot项目由jdk11转移为jdk8,在IDEA里运行一切正常.打包,部署到tomcat启动后,在客户端调用WebSocket出现如下异常: java.lang.Illeg ...
- Vue 局部过滤器和全局过滤器
Vue 过滤器总结: 定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理) 语法: 1.注册过滤器: Vue.filter(name,callback) 或 new Vue{filt ...
- 微信小程序学习记录
尺寸单位 rpx 常常以iphone6为开发基准, 1px = 2rpx,不同设备的比例是不同的: 小程序生命周期 和vue的生命周期很相似,不过小程序的生命周期和页面.组件的生命周期又又一点不一样 ...
- Dilated Neighborhood Attention Transformer概述
0.前言 相关资料: arxiv github 论文解读 论文基本信息: 发表时间:arxiv2022(2022.9.29) 1.针对的问题 之前的方法通过局部注意力机制来降低计算复杂度,但这削弱了自 ...
- CF850F 题解
题意 传送门 有一袋 \(n\) 个颜色球,第 \(i\) 个颜色的球有 \(a_i\) 个. 当袋子里至少有两个不同颜色的球时,执行以下步骤: 一个接一个的按照顺序随机取出两个的球,这些球的颜色可能 ...
- CF1786E题解
容易为本题的弱化版CF1786C想出一个贪心: #include<bits/stdc++.h> using namespace std; #define int long long int ...
- JS根据分数,计算名次(分数相同名次相同)
一开始的接口返回数据(数据已经拍好顺序,但是分数相同名次不同),如果数据未排序,先用sort排序,由大到小 分数相同名次相同,则需要以下操作即可 let prescore = 0;//初始分数 let ...
- Guava Retry重试机制
1.添加pom依赖 <dependency> <groupId>com.github.rholder</groupId> <artifactId>gua ...