阅读:23668回复:3

Android p添加打开/关闭以太网接口

楼主#
更多 发布于:2019-07-27 10:02
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) {


最新喜欢:

zhaoyf13zhaoyf...
沙发#
发布于:2019-07-28 09:44
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
板凳#
发布于:2020-05-12 14:23
干嘛要关闭呢
地板#
发布于:2020-05-27 08:50
阿赞88:干嘛要关闭呢回到原帖
应该是有客户会有这方面需求。
游客

返回顶部