在查看崩潰日志中發(fā)現了較多的SecurityException報錯,報錯信息如下:
java.lang.SecurityException: com.xxx.xxx was not granted either of these permissions: android.permission.CHANGE_NETWORK_STATE, android.permission.WRITE_SETTINGS.
at android.os.Parcel.readException(Parcel.java:1602)
at android.os.Parcel.readException(Parcel.java:1555)
at android.net.IConnectivityManager$Stub$Proxy.requestNetwork(IConnectivityManager.java:2064)
at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:2470)
at android.net.ConnectivityManager.requestNetwork(ConnectivityManager.java:2509)
at com.superrtc.call.NetworkMonitorAutoDetect$ConnectivityManagerDelegate.requestMobileNetwork(NetworkMonitorAutoDetect.java)
at com.superrtc.call.NetworkMonitorAutoDetect.<init>(NetworkMonitorAutoDetect.java)
at com.superrtc.mediamanager.XReachability.setAutoDetectConnectivityStateInternal(XReachability.java)
at com.superrtc.mediamanager.XReachability.startMonitoring(XReachability.java)
at com.superrtc.mediamanager.EMediaManager$7.run(EMediaManager.java)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at com.superrtc.util.LooperExecutor.run(LooperExecutor.java)
按理說android.permission.CHANGE_NETWORK_STATE這一個權限,是普通權限嗜憔,只在Manifest中聲明就可以獲取贰镣。
出現這個問題很不科學啊欢顷,再仔細去看看錯誤日志,發(fā)現報錯只發(fā)生在6.0這個版本和部分6.0.1版本中逼友。
那問題應該是出在6.0 版本中呀闻,之后去查資料后發(fā)現化借,在6.0版本中這個權限默認是被拒絕,無法獲取這個權限捡多。所以蓖康,在需要個權限的時候會出現權限問題導致應用因為權限問題崩潰铐炫。這個在stackoverflow中有人討論過了,去看看
知道問題的原因之后的解決方案就簡單了蒜焊,既然CHANGE_NETWORK_STATE權限獲取不到倒信,那只好想辦法打開WRITE_SETTINGS這個權限了。
跳轉到應用程序設置頁打開WRITE_SETTINGS這個權限:
Intent goToSettings = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
goToSettings.setData(Uri.parse("package:" + getPackageName()));
startActivity(goToSettings);