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
This commit is contained in:
@@ -2567,7 +2567,12 @@ public class ConnectivityManager {
|
|||||||
if (NetworkUtils.bindProcessToNetwork(netId)) {
|
if (NetworkUtils.bindProcessToNetwork(netId)) {
|
||||||
// Set HTTP proxy system properties to match network.
|
// Set HTTP proxy system properties to match network.
|
||||||
// TODO: Deprecate this static method and replace it with a non-static version.
|
// 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.
|
// Must flush DNS cache as new network may have different DNS resolutions.
|
||||||
InetAddress.clearDnsCache();
|
InetAddress.clearDnsCache();
|
||||||
// Must flush socket pool as idle sockets will be bound to previous network and may
|
// Must flush socket pool as idle sockets will be bound to previous network and may
|
||||||
|
|||||||
Reference in New Issue
Block a user