【原創】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上,你的代碼裏有這個方法的時候纔會出現。那麼改法就比較簡單了,修改本身的方法便可。

相關文章
相關標籤/搜索