From 05697a62fce79c95e483a6b7e4fd4fb99033e567 Mon Sep 17 00:00:00 2001 From: Taylor Brandstetter Date: Thu, 7 Apr 2016 17:36:43 -0700 Subject: [PATCH] Gracefully continue if ConnectivityManager.requestNetwork fails. This happens on Android 6.0.0, which requires the WRITE_SETTINGS permission, which is somewhat impractical to obtain. R=glaznev@webrtc.org Review URL: https://codereview.webrtc.org/1863413003 . Cr-Commit-Position: refs/heads/master@{#12288} --- .../android/org/webrtc/NetworkMonitorAutoDetect.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/webrtc/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java b/webrtc/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java index e0af09ba86..c4e3a901c9 100644 --- a/webrtc/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java +++ b/webrtc/api/java/android/org/webrtc/NetworkMonitorAutoDetect.java @@ -445,8 +445,16 @@ public class NetworkMonitorAutoDetect extends BroadcastReceiver { registerReceiver(); if (connectivityManagerDelegate.supportNetworkCallback()) { - mobileNetworkCallback = new NetworkCallback(); - connectivityManagerDelegate.requestMobileNetwork(mobileNetworkCallback); + // On Android 6.0.0, the WRITE_SETTINGS permission is necessary for + // requestNetwork, so it will fail. This was fixed in Android 6.0.1. + NetworkCallback tempNetworkCallback = new NetworkCallback(); + try { + connectivityManagerDelegate.requestMobileNetwork(tempNetworkCallback); + } catch (java.lang.SecurityException e) { + Logging.w(TAG, "Unable to obtain permission to request a cellular network."); + tempNetworkCallback = null; + } + mobileNetworkCallback = tempNetworkCallback; allNetworkCallback = new SimpleNetworkCallback(); connectivityManagerDelegate.registerNetworkCallback(allNetworkCallback); } else {