起因是因为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)
上网查了下,原来在Android11及以上机型上调用telephonyManager.getNetworkType()需要READ_PHONE_STATE权限,于是我就在应用启动时加上了申请该权限的代码,并且在调用getNetworkType()方法的地方加了判断,如果系统版本大于等于11并且没有被授予READ_PHONE_STATE权限,就不调getNetworkType()方法,测试时,发现oppo 11系统手机上请求READ_PHONE_STATE权限时没有弹出请求权限弹窗,而是直接返回被拒绝授予权限的结果,并且在没有被授予READ_PHONE_STATE权限的情况下,调用getNetworkType()方法并没有崩溃,这让我很纳闷,后来经过查询大量资料,找到了11系统手机上请求READ_PHONE_STATE权限时没有弹出请求权限弹窗的原因,就是有些我引入的library manifest文件有这些代码:
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
android:maxSdkVersion="29" />
限制了申请READ_PHONE_STATE权限的最大sdk版本,所以导致在11系统上无法正常申请,所以,在app的manifest文件加入下面这些代码即可解决:文章来源:https://www.toymoban.com/news/detail-518636.html
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:remove="android:maxSdkVersion" />
另外关于11系统上无READ_PHONE_STATE权限的情况下,调用getNetworkType()方法并没有崩溃的问题,我还没有找到答案,估计是手机厂商对底层代码做了修改吧文章来源地址https://www.toymoban.com/news/detail-518636.html
到了这里,关于关于在Android 11系统手机上请求READ_PHONE_STATE权限的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!