起因是因為bugly報錯:
#25004 java.lang.SecurityException
getDataNetworkTypeForSubscriber
1android.os.Parcel.createExceptionOrNull(Parcel.java:2471)
2android.os.Parcel.createException(Parcel.java:2455)
3android.os.Parcel.readException(Parcel.java:2438)
4android.os.Parcel.readException(Parcel.java:2380)
5com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:9300)
6android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2958)
7android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2922)
上網(wǎng)查了下,原來在Android11及以上機型上調(diào)用telephonyManager.getNetworkType()需要READ_PHONE_STATE權(quán)限,于是我就在應(yīng)用啟動時加上了申請該權(quán)限的代碼,并且在調(diào)用getNetworkType()方法的地方加了判斷,如果系統(tǒng)版本大于等于11并且沒有被授予READ_PHONE_STATE權(quán)限,就不調(diào)getNetworkType()方法,測試時,發(fā)現(xiàn)oppo 11系統(tǒng)手機上請求READ_PHONE_STATE權(quán)限時沒有彈出請求權(quán)限彈窗,而是直接返回被拒絕授予權(quán)限的結(jié)果,并且在沒有被授予READ_PHONE_STATE權(quán)限的情況下,調(diào)用getNetworkType()方法并沒有崩潰,這讓我很納悶,后來經(jīng)過查詢大量資料,找到了11系統(tǒng)手機上請求READ_PHONE_STATE權(quán)限時沒有彈出請求權(quán)限彈窗的原因,就是有些我引入的library manifest文件有這些代碼:
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
限制了申請READ_PHONE_STATE權(quán)限的最大sdk版本,所以導(dǎo)致在11系統(tǒng)上無法正常申請,所以,在app的manifest文件加入下面這些代碼即可解決:文章來源:http://www.zghlxwxcb.cn/news/detail-518636.html
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:remove="android:maxSdkVersion" />
另外關(guān)于11系統(tǒng)上無READ_PHONE_STATE權(quán)限的情況下,調(diào)用getNetworkType()方法并沒有崩潰的問題,我還沒有找到答案,估計是手機廠商對底層代碼做了修改吧文章來源地址http://www.zghlxwxcb.cn/news/detail-518636.html
到了這里,關(guān)于關(guān)于在Android 11系統(tǒng)手機上請求READ_PHONE_STATE權(quán)限的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!