测试平台
Platform: RK3399
OS: 8.1
说明
RK3399-8.1中没有控制Ethernet开关的接口,为了满足部分应用场景需要特添加setEthernetEnabled(boolean enable)和isEthernetInterfaceActive()来对开关进行控制及获取实时状态
实现代码
diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java
index 89ddfb2..e2f78aa 100755
--- a/java/com/android/server/ethernet/EthernetNetworkFactory.java
+++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java
@@ -399,6 +399,53 @@ class EthernetNetworkFactory {
}
}
+ public boolean isEthernetInterfaceActive(){
+ return Settings.System.getInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1) != 0;
+ }
+
+ public void setInterfaceDown() {
+ Log.e(TAG, "setInterfaceDown mIface:" + mIface);
+ try {
+ if(!TextUtils.isEmpty(mIface)) {
+ updateInterfaceState(mIface,false);
+ Settings.System.putInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,0);
+ }
+ }catch (Exception e) {
+ Log.e(TAG, "Error downing interface " + mIface + ": " + e);
+ }
+ }
+ public void setInterfaceUp() {
+ Log.e(TAG, "setInterfaceUp mIface:" + mIface);
+ try {
+ if(!TextUtils.isEmpty(mIface)) {
+ updateInterfaceState(mIface,true);
+ Settings.System.putInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1);
+ }
+ }catch (Exception e) {
+ Log.e(TAG, "Error uping interface " + mIface + ": " + e);
+ }
+ }
+
private boolean maybeTrackInterface(String iface) {
// If we don't already have an interface, and if this interface matches
// our regex, start tracking it.
@@ -688,8 +735,9 @@ class EthernetNetworkFactory {
} catch (InterruptedException ignore) {
}
int carrier = getEthernetCarrierState(mIfaceTmp);
+ int ethernet_on = Settings.System.getInt(mContext.getContentResolver(),Settings.System.ETHERNET_ON,1);
Log.d(TAG, mIfaceTmp + " carrier = " + carrier);
- if (carrier == 1) {
+ if (carrier == 1 && ethernet_on != 0) {
updateInterfaceState(mIfaceTmp, true);
} else if (mEthernetCurrentState != EthernetManager.ETHER_STATE_DISCONNECTED ){
updateInterfaceState(mIfaceTmp, false);
@@ -39,7 +41,7 @@ public final class EthernetService extends SystemService {
@Override
public void onBootPhase(int phase) {
if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) {
- mImpl.start();
+ mImpl.start();
}
}
}
diff --git a/java/com/android/server/ethernet/EthernetServiceImpl.java b/java/com/android/server/ethernet/EthernetServiceImpl.java
index bab8863..beb26a0 100755
--- a/java/com/android/server/ethernet/EthernetServiceImpl.java
+++ b/java/com/android/server/ethernet/EthernetServiceImpl.java
@@ -80,6 +80,23 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
"ConnectivityService");
}
+ public void setEthernetEnabled(boolean enable) {
+ //enforceChangePermission();
+ Log.i(TAG,"setEthernetEnabled() : enable="+enable);
+ if ( enable ) {
+ // start();
+ mTracker.setInterfaceUp();
+ } else {
+ // stop();
+ mTracker.setInterfaceDown();
+ }
+ }
+
+ public boolean isEthernetInterfaceActive() {
+ //enforceChangePermission();
+ return mTracker.isEthernetInterfaceActive();
+ }
+
public void start() {
Log.i(TAG, "Starting Ethernet service");
@@ -92,6 +109,11 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
mStarted.set(true);
}
+ public void stop(){
+ mTracker.stop();
+ mStarted.set(false);
+ }
+
/**
* Get Ethernet configuration
* @return the Ethernet Configuration, contained in {@link IpConfiguration}.
diff --git a/frameworks/base/core/java/android/net/EthernetManager.java b/frameworks/base/core/java/android/net/EthernetManager.java
index adfaf08..c3e9445 100755
--- a/frameworks/base/core/java/android/net/EthernetManager.java
+++ b/frameworks/base/core/java/android/net/EthernetManager.java
@@ -24,7 +24,7 @@ import android.net.IpConfiguration;
import android.os.Handler;
import android.os.Message;
import android.os.RemoteException;
-
+import android.util.Log;
import java.util.ArrayList;
@@ -147,6 +147,24 @@ public class EthernetManager {
}
}
+ public void setEthernetEnabled(boolean enabled) {
+ Log.d(TAG,enabled ? "turn on Ethernet" : "turn off Ethernet");
+ try {
+ mService.setEthernetEnabled(enabled);
+ } catch (RemoteException e) {
+
+ }
+ }
+
+ public boolean isEthernetInterfaceActive() {
+ try {
+ return mService.isEthernetInterfaceActive();
+ } catch (RemoteException e) {
+
+ }
+ return false;
+ }
+
public int getEthernetCarrierState(String ifname) {
try {
return mService.getEthernetCarrierState(ifname);
diff --git a/frameworks/base/core/java/android/net/IEthernetManager.aidl b/frameworks/base/core/java/android/net/IEthernetManager.aidl
index 39d6b13..e4f1b11 100755
--- a/frameworks/base/core/java/android/net/IEthernetManager.aidl
+++ b/frameworks/base/core/java/android/net/IEthernetManager.aidl
@@ -41,4 +41,8 @@ interface IEthernetManager
void disconnect(String iface);
void addListener(in IEthernetServiceListener listener);
void removeListener(in IEthernetServiceListener listener);
+
+ void setEthernetEnabled(in boolean enable);
+ boolean isEthernetInterfaceActive();
+
}
diff --git a/frameworks/base/core/java/android/net/InterfaceConfiguration.java b/frameworks/base/core/java/android/net/InterfaceConfiguration.java
index 34cde08..095d1f1 100644
--- a/frameworks/base/core/java/android/net/InterfaceConfiguration.java
+++ b/frameworks/base/core/java/android/net/InterfaceConfiguration.java
@@ -33,8 +33,8 @@ public class InterfaceConfiguration implements Parcelable {
private LinkAddress mAddr;
private HashSet<String> mFlags = Sets.newHashSet();
- private static final String FLAG_UP = "up";
- private static final String FLAG_DOWN = "down";
+ public static final String FLAG_UP = "up";
+ public static final String FLAG_DOWN = "down";
@Override
public String toString() {
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index d5a9d09..756558a 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -3065,6 +3065,11 @@ public final class Settings {
private static final Validator DIM_SCREEN_VALIDATOR = sBooleanValidator;
/**
+ * @hide
+ */
+ public static final String ETHERNET_ON = "etnernet_on";
+
+ /**
* The display color mode.
* @hide
*/
--