项目中在后台发送通知,突然某一天测出在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的更多相关文章

  1. Android Studio 首次安装报错 Java.lang.RuntimeException:java.lang.NullPointerException...错

    下次安装报:Java.lang.RuntimeException: java.lang.NullPointerException......错 只需在文件..\Android Studio\bin\i ...

  2. 我的Android进阶之旅------>解决DownloadManager报错java.lang.SecurityException: Invalid value for visibility: 2

    1.问题描述 今天使用Android系统的DownloadManager进行下载操作时,爆了如下所示的错误: java.lang.RuntimeException: Unable to start s ...

  3. 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 ...

  4. 我的Android进阶之旅------>Android中MediaRecorder.stop()报错 java.lang.RuntimeException: stop failed.【转】

    本文转载自:http://blog.csdn.net/ouyang_peng/article/details/48048975 今天在调用MediaRecorder.stop(),报错了,java.l ...

  5. 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT

    最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...

  6. 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"

    在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...

  7. 反射报错java.lang.IllegalArgumentException: wrong number of arguments

    class Person{ private String name ; private String sex ; public Person(){ System.out.println("c ...

  8. spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext

    spring boot启动STS 运行报错 java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext 学习了: http ...

  9. eclipse启动报错java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' befo

    报错: java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invo ...

  10. 开着idea,死机了,关机重启。重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification

    开着idea,死机了,关机重启.重启之后,重新打开idea报错java.lang.AssertionError:upexpected content storage modification. goo ...

随机推荐

  1. 【Quartus系列】实验一: 3-8译码器(原理图输⼊设计)

    实验一: 3-8译码器(原理图输⼊设计) ⼀:实验⽬的 1. 了解3-8译码器的电路原理,掌握组合逻辑电路的设计⽅法 2. 掌握QuartusII软件原理图输⼊设计的流程 ⼆:实验内容 2.1设计输⼊ ...

  2. Mosquitto安装与部署

    版本说明: Mosquitto版本:v2.0.10     libwebsockets版本:v3.0.1(用于支持websockets)     mosquitto-go-auth(Mosquitto ...

  3. 服务器5M带宽下载速计算

    5M贷款的服务器实际下载速度不是5M每秒,而是640KB/S,是由于服务商口中的宽带指的是bit(比特),而下载速度使用的单位是Byte(字节),1Byte(字节)=8bit(比特),所以,宽带和下载 ...

  4. app对接微信支付(app支付)

    (先补充一下,app唤醒微信支付失败的话,在确保没错的情况下,建议换一个手机或者重新下载微信,不知道是微信缓存还是什么原因) 1.先申请好开发环境 app支付不需要公众号,所以申请好开发商号和开发平台 ...

  5. 为什么常用Formdata对象来上传图片

    一.上传的数据体格式Content-Type 1.application/x-www-form-urlencoded 2.application/json 3.multipart/form-data ...

  6. 整理15款实用javascript富文本编辑器

    百度UEditor 官方网址:http://ueditor.baidu.com/website/ UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验 ...

  7. Hook新特性(一)

    基础Hook 1.useState const [state, setState] = useState(initialState); //返回一个state变量,指为initialState,set ...

  8. Android中保存文件到内部存储器

    1 public static void saveDataToPrivateFile(Context context, String data, int mode, String fileName) ...

  9. TypeScript Array(数组)

    TypeScript Array(数组) 数组对象是使用单独的变量名来存储一系列的值. 数组非常常用. 假如你有一组数据(例如:网站名字),存在单独变量如下所示: var site1="Go ...

  10. vue 的生命周期

    生命周期就是 vue 从开始创建到销毁的过程,分为四大步(创建,挂载, 更新,销毁),每一步又分为两小步,如 beforeCreate,created.beforeCreate 前,也就是 new V ...