小追兵專欄
Android 6.0
我遇到的問題是,我在明明在AndroidManifest.xml
中添加了READ_PHONE_STATE
權限,可是在我的手機上一直報錯,錯誤信息如下:
getDeviceId: Neither user 10254 nor
current process has android.permission.READ_PHONE_STATE.
java.lang.SecurityException: getDeviceId:
has android.permission.READ_PHONE_STATE.
后來發現,其他非android6.0的系統都是正常的,還有一個問題,是我為了兼容android的樣式,吧targetSdkVersion 19
改成了targetSdkVersion 23
,所以android6.0在同事的targetSdkVersion 19
上運行是沒問題的。
這個問題產生有幾個條件:
- 你的測試機是android6.0以上版本;
- 你的編譯環境的 targetSdkVersion 23;
- 你在代碼中沒有做權限的請求處理;
產生問題的原因:
android 6.0以上增加了動態獲取權限api,想要動態獲取手機的權限。類似iOS那樣,在使用時,彈出對話框,提示用戶,請求用戶允許。如果你沒做處理,就會報錯。
現在給你兩個鏈接,應該可以幫助我們解決這個問題:
解決辦法:
解決辦法有兩個,任選一個即可。
方法一: targetSdkVersion 設置小于23;
方法二:如下,代碼中增加動態權限適配;
問題的描述:
https://stackoverflow.com/questions/32635704/cant-get-the-permission
解決的方法:
https://developer.android.com/intl/zh-cn/training/permissions/requesting.html
比較好用的github庫
https://github.com/hotchemi/PermissionsDispatcher
Demo詳解地址:
http://www.lxweimin.com/p/dbe4d37731e6
Demo下載地址:
https://github.com/SpikeKing/wcl-permission-demo