From 41b1fbca30df82c8570df023e8fcaad0712cb351 Mon Sep 17 00:00:00 2001 From: Lorenzo Colitti Date: Wed, 22 Apr 2015 11:52:48 +0900 Subject: [PATCH] Don't require ACCESS_NETWORK_STATE in setProcessDefaultNetwork The documentation for setProcessDefaultNetwork does not mention that it requires ACCESS_NETWORK_STATE, but a process without ACCESS_NETWORK_STATE that calls it will crash because we can't fetch the proxy properties. Because ACCESS_NETWORK_STATE is not required to obtain a Network object (Network objects can come from broadcasts too), it may not be reasonable to require the permission. We did not do so in L. For now, ignore the failure and don't crash the app. I've filed http://b/20470604 to track a longer term fix. Bug: 20081183 Bug: 20423580 Bug: 20470604 Change-Id: I158016130b4afb1d300357fe703804d2e7bc609b --- core/java/android/net/ConnectivityManager.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index b80d91f2ff..a48b324067 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -2567,7 +2567,12 @@ public class ConnectivityManager { if (NetworkUtils.bindProcessToNetwork(netId)) { // Set HTTP proxy system properties to match network. // TODO: Deprecate this static method and replace it with a non-static version. - Proxy.setHttpProxySystemProperty(getInstance().getDefaultProxy()); + try { + Proxy.setHttpProxySystemProperty(getInstance().getDefaultProxy()); + } catch (SecurityException e) { + // The process doesn't have ACCESS_NETWORK_STATE, so we can't fetch the proxy. + Log.e(TAG, "Can't set proxy properties", e); + } // Must flush DNS cache as new network may have different DNS resolutions. InetAddress.clearDnsCache(); // Must flush socket pool as idle sockets will be bound to previous network and may