阅读:23958回复:3
Android p添加打开/关闭以太网接口
diff --git a/core/java/android/net/IEthernetManager.aidl b/core/java/android/net/IEthernetManager.aidl
old mode 100644 new mode 100755 index 94960b5..dd53f3a --- a/core/java/android/net/IEthernetManager.aidl +++ b/core/java/android/net/IEthernetManager.aidl @@ -32,4 +32,7 @@ boolean isAvailable(String iface); void addListener(in IEthernetServiceListener listener); void removeListener(in IEthernetServiceListener listener); + int getEthernetState(); + void setEthernetState(int status); } diff --git a/core/java/android/net/EthernetManager.java b/core/java/android/net/EthernetManager.java old mode 100644 new mode 100755 index ecccda5..bc204dd --- a/core/java/android/net/EthernetManager.java +++ b/core/java/android/net/EthernetManager.java @@ -21,7 +21,7 @@ import android.os.Handler; import android.os.Message; import android.os.RemoteException; - +import android.util.Log; import java.util.ArrayList; /** @@ -36,6 +36,11 @@ private final Context mContext; private final IEthernetManager mService; + + public static final int ETHERNET_STATE_DISABLED = 1; + public static final int ETHERNET_STATE_ENABLED = 2; + public static final int ETHERNET_STATE_UNKNOWN = 3; + private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -171,4 +176,31 @@ } } } + + + public void setEthernetEnabled(boolean enable) { + try { + //if(DEBUG) Log.d(TAG, "setEthernetEnabled(" + enable + ")"); + mService.setEthernetState(enable ? ETHERNET_STATE_ENABLED:ETHERNET_STATE_DISABLED); + } catch (RemoteException e) { + Log.e(TAG, "setEthernetEnabled(" + enable + ") ERROR!"); + } + } + + /** + * Get Real Time Ethernet State + * @return + * ETHERNET_STATE_DISABLED + * ETHERNET_STATE_ENABLED + * ETHERNET_STATE_UNKNOWN + */ + public int getEthernetState() { + try { + //if(DEBUG) Log.d(TAG, "getEthernetState(): " + mService.getEthernetState()); + return mService.getEthernetState(); + } catch (RemoteException e) { + Log.e(TAG, "getEthernetState() ETHERNET_STATE_UNKNOWN!"); + return ETHERNET_STATE_UNKNOWN; + } + } } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java old mode 100644 new mode 100755 index f68cf83..af3844e --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2284,7 +2284,7 @@ MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_COUNT); MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_DELAY_MS); MOVED_TO_SECURE.add(Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS); - + MOVED_TO_SECURE.add(Secure.ETHERNET_ON); // At one time in System, then Global, but now back in Secure MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS); } @@ -6645,6 +6645,11 @@ */ @Deprecated public static final String WIFI_WATCHDOG_PING_TIMEOUT_MS = "wifi_watchdog_ping_timeout_ms"; + /** + * Whether the ETHERNET should be on. Only the ETHERNET service should touch this. + * + */ + public static final String ETHERNET_ON = "ethernet_on"; /** * @deprecated Use diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java old mode 100644 new mode 100755 index e853399..8940cec --- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java @@ -369,6 +369,7 @@ Settings.Secure.WIFI_WATCHDOG_PING_COUNT, Settings.Secure.WIFI_WATCHDOG_PING_DELAY_MS, Settings.Secure.WIFI_WATCHDOG_PING_TIMEOUT_MS, + Settings.Secure.ETHERNET_ON, }; moveSettingsToNewTable(db, TABLE_SYSTEM, TABLE_SECURE, settingsToMove, false); upgradeVersion = 28; @@ -2363,6 +2364,8 @@ loadStringSetting(stmt, Settings.Secure.LOCATION_PROVIDERS_ALLOWED, R.string.def_location_providers_allowed); + + loadSetting(stmt, Settings.Secure.ETHERNET_ON,"2");// 2:ethernet enable 1:disabled // Don't do this. The SystemServer will initialize ADB_ENABLED from a // persistent system property instead. diff --git a/java/com/android/server/ethernet/EthernetNetworkFactory.java b/java/com/android/server/ethernet/EthernetNetworkFactory.java index 86df1ce..6cc137a 100755 --- a/java/com/android/server/ethernet/EthernetNetworkFactory.java +++ b/java/com/android/server/ethernet/EthernetNetworkFactory.java @@ -217,6 +217,20 @@ return network; } + + public synchronized void stop() { + NetworkInterfaceState network = mTrackingInterfaces.get("eth0"); + if (network != null) { + network.stop(); + } + } + + public synchronized void start() { + NetworkInterfaceState network = mTrackingInterfaces.get("eth0"); + if (network != null) { + network.start(); + } + } private static class NetworkInterfaceState { final String name; @@ -281,7 +295,7 @@ return mCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED); } - private void start() { + void start() { if (mIpClient != null) { if (DBG) Log.d(TAG, "IpClient already started"); return; diff --git a/java/com/android/server/ethernet/EthernetServiceImpl.java b/java/com/android/server/ethernet/EthernetServiceImpl.java old mode 100644 new mode 100755 index d5beec1..45b6422 --- a/java/com/android/server/ethernet/EthernetServiceImpl.java +++ b/java/com/android/server/ethernet/EthernetServiceImpl.java @@ -27,13 +27,13 @@ import android.os.RemoteException; import android.util.Log; import android.util.PrintWriterPrinter; - +import android.content.ContentResolver; import com.android.internal.util.IndentingPrintWriter; - +import android.net.EthernetManager; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.concurrent.atomic.AtomicBoolean; - +import android.provider.Settings; /** * EthernetServiceImpl handles remote Ethernet operation requests by implementing * the IEthernetManager interface. @@ -46,9 +46,30 @@ private Handler mHandler; private EthernetTracker mTracker; - + private final boolean DEBUG = true; + private int isEthernetEnabled; public EthernetServiceImpl(Context context) { mContext = context; + isEthernetEnabled = getEthernetPersistedState(); + } + + private synchronized void persistEthernetEnabled(boolean enabled) { + if (DEBUG) Log.d(TAG, "persistEthernetEnabled(boolean enabled) enabled:" + enabled); + final ContentResolver cr = mContext.getContentResolver(); + Settings.Secure.putInt(cr, Settings.Secure.ETHERNET_ON, + enabled ? EthernetManager.ETHERNET_STATE_ENABLED : EthernetManager.ETHERNET_STATE_DISABLED); + } + + public int getEthernetPersistedState() { + final ContentResolver cr = mContext.getContentResolver(); + try { + if (DEBUG) Log.d(TAG, "getEthernetPersistedState() ETHERNET_ON:" + + Settings.Secure.getInt(cr, Settings.Secure.ETHERNET_ON)); + return Settings.Secure.getInt(cr, Settings.Secure.ETHERNET_ON); + } catch (Settings.SettingNotFoundException e) { + Log.e(TAG, "getEthernetPersistedState() ETHERNET_STATE_UNKNOWN"); + return EthernetManager.ETHERNET_STATE_UNKNOWN; + } } private void enforceAccessPermission() { @@ -83,9 +104,14 @@ mHandler = new Handler(handlerThread.getLooper()); mTracker = new EthernetTracker(mContext, mHandler); - mTracker.start(); - - mStarted.set(true); + if (EthernetManager.ETHERNET_STATE_ENABLED == isEthernetEnabled) { + mTracker.start(); + mEthernetState = EthernetManager.ETHERNET_STATE_ENABLED; + mStarted.set(true); + } + //if (EthernetManager.ETHERNET_STATE_DISABLED == isEthernetEnabled) { + // setEthernetState(EthernetManager.ETHERNET_STATE_DISABLED); + //} } @Override @@ -187,4 +213,34 @@ mHandler.dump(new PrintWriterPrinter(pw), "EthernetServiceImpl"); pw.decreaseIndent(); } + + private int mEthernetState; + public synchronized void setEthernetState(int state) { + Log.i(TAG, "setEthernetState from " + mEthernetState + " to "+ state); + if (mEthernetState != state){ + mEthernetState = state; + + if (state == EthernetManager.ETHERNET_STATE_DISABLED) { + if (DEBUG) Log.d(TAG, "state == EthernetManager.ETHERNET_STATE_DISABLED"); + persistEthernetEnabled(false); + mTracker.stop(); + mStarted.set(false); + } else { + if (DEBUG) Log.d(TAG, "state == EthernetManager.ETHERNET_STATE_ENABLED"); + persistEthernetEnabled(true); + mTracker.stop(); + mTracker.start(); + mStarted.set(true); + } + } + } + public int getEthernetState() { + if (DEBUG) Log.d(TAG,"get EthernetState: " + mEthernetState); + if (EthernetManager.ETHERNET_STATE_ENABLED == getEthernetPersistedState()) { + return mEthernetState; + } else { + Log.i(TAG, "getEthernetState Ethernet not Enabled!"); + return EthernetManager.ETHERNET_STATE_DISABLED; + } + } } diff --git a/java/com/android/server/ethernet/EthernetTracker.java b/java/com/android/server/ethernet/EthernetTracker.java old mode 100644 new mode 100755 index 00eedd5..f8234bc --- a/java/com/android/server/ethernet/EthernetTracker.java +++ b/java/com/android/server/ethernet/EthernetTracker.java @@ -125,7 +125,17 @@ } mHandler.post(this::trackAvailableInterfaces); + if(mFactory != null){ + mFactory.start(); + } } + + synchronized void stop(){ + + if(mFactory != null){ + mFactory.stop(); + } + } void updateIpConfiguration(String iface, IpConfiguration ipConfiguration) { if (DBG) { |
|
最新喜欢:zhaoyf... |
沙发#
发布于:2019-07-28 09:44
|
|
|