1.描述
rk32887.1双网共存wifi内网以太网外网
2.修改
--- a/frameworks/base/core/java/android/net/NetworkFactory.java
+++ b/frameworks/base/core/java/android/net/NetworkFactory.java
@@ -229,7 +229,7 @@ public class NetworkFactory extends Handler {
private void evalRequest(NetworkRequestInfo n) {
if (VDBG) log("evalRequest");
- if (n.requested == false && n.score < mScore &&
+ if (n.requested == false && 0 < mScore &&
n.request.networkCapabilities.satisfiedByNetworkCapabilities(
mCapabilityFilter) && acceptRequest(n.request, n.score)) {
if (VDBG) log(" needNetworkFor");
diff --git a/frameworks/base/services/core/java/com/android/server/ConnectivityService.java b/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
index 020495f3af..6731769643 100644
--- a/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
+++ b/frameworks/base/services/core/java/com/android/server/ConnectivityService.java
@@ -4805,6 +4805,15 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (ENABLE_NETWORK_COEXIST) {
log("Skip teardownUnneededNetwork: " + nai.name());
+ if (nai.getCurrentScore() > 0) {
+ try {
+ mNetd.removeInterfaceFromNetwork(nai.linkProperties.getInterfaceName(), nai.network.netId);
+ mNetd.addInterfaceToLocalNetwork(nai.linkProperties.getInterfaceName(), nai.linkProperties.getRoutes());
+ mLegacyTypeTracker.add(nai.networkInfo.getType(), nai);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Failed to add iface to local network " + e);
+ }
+ }
} else {
nai.asyncChannel.disconnect();
}
@@ -4953,6 +4962,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
} else {
if (VDBG) log(" accepting network in place of null");
}
+ if (ENABLE_NETWORK_COEXIST) {
+ try {
+ mNetd.removeInterfaceFromLocalNetwork(newNetwork.linkProperties.getInterfaceName());
+ } catch(RemoteException e) {}
+ updateLinkProperties(newNetwork,null);
+ }
newNetwork.unlingerRequest(nri.request);
mNetworkForRequestId.put(nri.request.requestId, newNetwork);
if (!newNetwork.addRequest(nri.request)) {
@@ -5297,6 +5312,11 @@ public class ConnectivityService extends IConnectivityManager.Stub
// This has to happen after matching the requests, because callbacks are just requests.
notifyNetworkCallbacks(networkAgent, ConnectivityManager.CALLBACK_PRECHECK);
} else if (state == NetworkInfo.State.DISCONNECTED) {
+ if (ENABLE_NETWORK_COEXIST) {
+ try {
+ mNetd.removeInterfaceFromLocalNetwork(networkAgent.linkProperties.getInterfaceName());
+ } catch(RemoteException e) {}
+ }
networkAgent.asyncChannel.disconnect();
if (networkAgent.isVPN()) {
synchronized (mProxyLock) {
diff --git a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 129989849c..81eff1596b 100755
--- a/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/frameworks/opt/net/ethernet/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -15,6 +15,9 @@
*/
package com.android.server.ethernet;
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
import android.os.SystemProperties;
import android.content.Context;
import android.net.ConnectivityManager;
@@ -295,11 +298,6 @@ class EthernetNetworkFactory {
// first disconnect, then connect
public void reconnect(String iface) {
Log.d(TAG, "reconnect:");
- int carrier = getEthernetCarrierState(mIface);
- if(carrier == 0) {
- Log.d(TAG, "reconnect: RJ45 no plugin no need reconnect");
- return ;
- }
mReconnecting = true;
if (iface == null)
@@ -466,6 +464,10 @@ class EthernetNetworkFactory {
return;
}
+ if (mEthernetCurrentState == EthernetManager.ETHER_STATE_CONNECTED){
+ return ;
+ }
+
synchronized(EthernetNetworkFactory.this) {
if (mIpProvisioningThread != null) {
Log.d(TAG, "mIpProvisioningThread is already running");