关于Andriod11权限申请失败,程序崩溃

#142 · open · 6 comments

View on GitHub ↗

xxxbysecret

`TelephonyManager.getNetworkType()`在Android11上面需要动态申请`READ_PHONE_STATE`,但是当用户拒绝该权限后,在播放视频时会造成应用崩溃,这里是不是应该改成相关功能无法正常使用而不是直接崩溃?还是我使用的姿势不对? 下面是崩溃详情↓ Caused by: java.lang.SecurityException: getDataNetworkTypeForSubscriber at android.os.Parcel.createExceptionOrNull(Parcel.java:2385) at android.os.Parcel.createException(Parcel.java:2369) at android.os.Parcel.readException(Parcel.java:2352) at android.os.Parcel.readException(Parcel.java:2294) at com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:8762) at java.lang.reflect.Method.invoke(Native Method) at com.jg.bh.b.a.a.invoke(Native Method) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy3.getNetworkTypeForSubscriber(Unknown Source) at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:3706) at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:3670) at com.kk.taurus.playerbase.utils.NetworkUtils.getNetworkState(NetworkUtils.java:75) at com.kk.taurus.playerbase.extension.NetworkEventProducer.onAdded(NetworkEventProducer.java:100) at com.kk.taurus.playerbase.extension.ProducerGroup.addEventProducer(ProducerGroup.java:43) at com.kk.taurus.playerbase.widget.SuperContainer.addEventProducer(SuperContainer.java:161) at com.kk.taurus.playerbase.widget.BaseVideoView.onCreateSuperContainer(BaseVideoView.java:140) at com.kk.taurus.playerbase.widget.BaseVideoView.init(BaseVideoView.java:112) at com.kk.taurus.playerbase.widget.BaseVideoView.<init>(BaseVideoView.java:102) at com.kk.taurus.playerbase.widget.BaseVideoView.<init>(BaseVideoView.java:97) at com.kk.taurus.playerbase.widget.BaseVideoView.<init>(BaseVideoView.java:93)

Comments

jiajunhui

感谢反馈,后面会处理

ManuelEMR

Hi, is there any update on this issue?

jiajunhui

太忙,暂未处理

xiaobaDev

崩溃发生在项目的NetWorkUtils类,里面对网络状态的访问,引起READ_PHONE_STATE权限检查,在安卓11上会报安全异常,解决办法有两个 1、如果你自定义开发没用到网络事件,不启用即可 PlayerConfig.setUseDefaultNetworkEventProducer(false); 2、自己拷贝一份NetworkEventProducer,把NetWorkUtils类加个tryCatch即可 另外项目中ErrorCover 也直接引用了NetWorkUtils类,需要把相关方法增加tryCatch ``` private int tryGetNetworkState() { try { return NetworkUtils.getNetworkState(getContext()); } catch (Throwable throwable) { throwable.printStackTrace(); return STATUS_ERROR; } } ```

niyangup

> 崩溃发生在项目的NetWorkUtils类,里面对网络状态的访问,引起READ_PHONE_STATE权限检查,在安卓11上会报安全异常,解决办法有两个 > > 1、如果你自定义开发没用到网络事件,不启用即可 PlayerConfig.setUseDefaultNetworkEventProducer(false); > > 2、自己拷贝一份NetworkEventProducer,把NetWorkUtils类加个tryCatch即可 > > 另外项目中ErrorCover 也直接引用了NetWorkUtils类,需要把相关方法增加tryCatch > > ``` > private int tryGetNetworkState() { > try { > return NetworkUtils.getNetworkState(getContext()); > } catch (Throwable throwable) { > throwable.printStackTrace(); > return STATUS_ERROR; > } > } > ``` good

XianLiangZou

> 崩溃发生在项目的NetWorkUtils类,里面对网络状态的访问,引起READ_PHONE_STATE权限检查,在安卓11上会报安全异常,解决办法有两个 > > 1、如果你自定义开发没用到网络事件,不启用即可 PlayerConfig.setUseDefaultNetworkEventProducer(false); > > 2、自己拷贝一份NetworkEventProducer,把NetWorkUtils类加个tryCatch即可 > > 另外项目中ErrorCover 也直接引用了NetWorkUtils类,需要把相关方法增加tryCatch > > ``` > private int tryGetNetworkState() { > try { > return NetworkUtils.getNetworkState(getContext()); > } catch (Throwable throwable) { > throwable.printStackTrace(); > return STATUS_ERROR; > } > } > ``` 第二种自己拷贝一份NetworkEventProducer修改要怎么覆盖默认设置呢,直接依赖源码修改源码吗