【原创】android 7.0 通知报错 java.lang.SecurityException: You need MANAGE_USERS permission to: check if spec

项目中在后台发送通知,忽然某一天测出在Android 7.0上通知发送失败,那么根据提示,咱们尝试加了MANAGE_USERS权限,看起来是个系统级别权限,验证后果真无效。接着在搜索后都无果,彷佛你们都没遇到过,非常诡异。
从报错看可能跟系统用户有关,也许关联了什么权限没有得到。开始只能经过try/catch, 这样在前台能够收到消息。那在后台仍是有问题。api

开始我有几个怀疑点:
一、7.0 修改了Notification的构建方式。 但查看api更新说明,没有说起。
二、当时测出问题是在Nexus6, 从这个权限名来看 MANAGE_USERS,怀疑与系统的用户管理权限有关。测试

后来通过很长时间终于找到这个问题的根本缘由。ui

首先重建一个Demo在7.0上测试一切正常,说明颇有多是咱们本身工程的问题,后来发如今自定义的MyApplication有一个方法叫getUserId(), 而在Notification构建时发现居然有一个相同的方法:blog

sdk 24(7.0代码):

get

因为这个Context 在Builder构造的时候传的是Application context, 因此很大可能就是和系统方法冲突了。io

可是我又看了下,7.0之前的代码也有一样的方法,只是位置略有不一样,至此仍是不能解释为何只有7.0有问题。后台

sdk 23:
sdk

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

搜索

正是因为加了 callingUserId != userId 这个权限判断,才会抛出这个异常,虽然系统通知的流程我不太熟,但至此已经能够确认此问题的根本缘由。权限

因此这个bug很巧,只有在7.0上,你的代码里有这个方法的时候才会出现。那么改法就比较简单了,修改本身的方法便可。

相关文章
相关标签/搜索