{"id":1073,"date":"2020-03-08T14:18:56","date_gmt":"2020-03-08T06:18:56","guid":{"rendered":"http:\/\/www.max-shu.com\/blog\/?p=1073"},"modified":"2020-03-08T14:18:56","modified_gmt":"2020-03-08T06:18:56","slug":"android9%e4%b8%8b%e5%a2%9e%e5%8a%a0%e5%af%b9eth0%e4%bb%a5%e5%a4%aa%e7%bd%91ip%e5%9c%b0%e5%9d%80%e7%9a%84%e9%85%8d%e7%bd%ae%ef%bc%88%e4%bb%a5%e5%8f%8a%e5%a6%82%e4%bd%95%e4%bf%ae%e6%94%b9%e5%b9%b6","status":"publish","type":"post","link":"http:\/\/www.max-shu.com\/blog\/?p=1073","title":{"rendered":"android9\u4e0b\u589e\u52a0\u5bf9eth0\u4ee5\u592a\u7f51IP\u5730\u5740\u7684\u914d\u7f6e\uff08\u4ee5\u53ca\u5982\u4f55\u4fee\u6539\u5e76\u7f16\u8bd1SDK\uff09"},"content":{"rendered":"<h3>\u589e\u52a0\u5bf9\u4ee5\u592a\u7f51IP\u5730\u5740\u7684\u914d\u7f6e\uff08app\u7528\u53cd\u5c04\u65b9\u5f0f\u83b7\u53d6EthernetManager\u548cIEthernetManager\u7684\u5b9e\u4f8b\u6765\u7528\uff09\uff1a<\/h3>\n<div>\u53c2\u8003 <a href=\"https:\/\/github.com\/Dufre\/Android-Settings-Ethernet\">https:\/\/github.com\/Dufre\/Android-Settings-Ethernet<\/a><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/opt\/net\/ethernet\/java\/com\/android\/server\/ethernet\/EthernetServiceImpl.java<\/span><\/div>\n<div>\u5728dump()\u51fd\u6570\u524d\u9762\u6dfb\u52a0\u51fd\u6570\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public void updateIpConfiguration(String iface, IpConfiguration ipConfiguration){<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Log.i(TAG, &#8220;Enter in updateIpConfiguration, iface == &#8221; + iface);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mTracker.updateIpConfiguration(iface, ipConfiguration);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0enforceAccessPermission();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0start();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div>\u5c31\u662f\u5728\u8fd9\u4e2adump\u4e0a\u9762\u589e\u52a0\u4e0a\u9762\u51fd\u6570\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0@Override<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/EthernetManager.java<\/span><\/div>\n<div>\u5728\u8be5\u884c\u4e0b\u589e\u52a0\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0private static final int MSG_AVAILABILITY_CHANGED = 1000;<\/div>\n<div>\u65b0\u52a0\u7684\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final String ETHERNET_STATE_CHANGED_ACTION = &#8220;<a style=\"color: #800080;\" href=\"http:\/\/android.net.ethernet.ethernet_state_changed\/\">android.net.ethernet.ETHERNET_STATE_CHANGED&#8221;;<\/a><\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final String EXTRA_ETHERNET_STATE = &#8220;ethernet_state&#8221;;<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final int ETHER_STATE_DISCONNECTED = 0;<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final int ETHER_STATE_CONNECTING = 1;<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final int ETHER_STATE_CONNECTED = 2;<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\/**<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0* @hide<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public static final int ETHER_STATE_DISCONNECTING = 3;<\/span><\/div>\n<div><\/div>\n<div>\u5728EthernetManager\u7c7b\u7684\u5c3e\u90e8\u6dfb\u52a0\u8be5\u7c7b\u7684\u51fd\u6570\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public int getEthernetCarrierState(String ifname) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getEthernetCarrierState(ifname);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 0;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String getEthernetMacAddress(String ifname) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getEthernetMacAddress(ifname);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public int getEthernetConnectState() {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getEthernetConnectState();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return 0;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String getIpAddress() {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getIpAddress();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;192.168.1.1&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String getNetmask() {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getNetmask();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;255.255.255.0&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String getGateway() {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getGateway();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;0.0.255.255&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String getDns() {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.getDns();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;0.0.0.0&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public String dumpCurrentState(int state) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return mService.dumpCurrentState(state);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return &#8220;&#8221;;<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public void disconnect(String iface) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/*<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mService.disconnect(iface);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public void updateIpConfiguration(String iface, IpConfiguration ipConfiguration){<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mService.updateIpConfiguration(iface, ipConfiguration);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (RemoteException e) {<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw e.rethrowFromSystemServer();<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0}<\/span><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/IEthernetManager.aidl<\/span><\/div>\n<div>\u5728\u8be5\u884c\u4e0b\u589e\u52a0\u4e00\u884c\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0void removeListener(in IEthernetServiceListener listener);<\/div>\n<div>\u5c31\u662f\u6dfb\u52a0\u8fd9\u4e2a\u51fd\u6570\u5b9a\u4e49\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0void updateIpConfiguration(String iface, in IpConfiguration ipConfiguration);<\/span><\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/EthernetManager.java<\/span><\/div>\n<div>\u53bb\u6389\u8fd9\u91cc\u7684@hide<\/div>\n<div><span style=\"color: #800080;\">* @hide<\/span><\/div>\n<div>*\/<\/div>\n<div>@SystemService(Context.ETHERNET_SERVICE)<\/div>\n<div>public class EthernetManager {<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/IpConfiguration.java<\/span><\/div>\n<div>\u53bb\u6389\u8fd9\u91cc\u7684@hide<\/div>\n<div>\/**<\/div>\n<div>* A class representing a configured network.<\/div>\n<div><span style=\"color: #800080;\">* @hide<\/span><\/div>\n<div>*\/<\/div>\n<div>public class IpConfiguration implements Parcelable {<\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/StaticIpConfiguration.java<\/span><\/div>\n<div>\u53bb\u6389\u8fd9\u91cc\u7684@hide<\/div>\n<div><span style=\"color: #800080;\">* @hide<\/span><\/div>\n<div>*\/<\/div>\n<div>public class StaticIpConfiguration implements Parcelable {<\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/base\/core\/java\/android\/net\/EthernetManager.java<\/span><\/div>\n<div>\u53bb\u6389\u8fd9\u91cc\u7684@link<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0* the standard {<span style=\"color: #800080;\">@link<\/span> android.content.Context#ETHERNET_SERVICE Context.ETHERNET_SERVICE}.<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0*\/<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0public EthernetManager(Context context, IEthernetManager service) {<\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/opt\/net\/ethernet\/java\/com\/android\/server\/ethernet\/EthernetServiceImpl.java<\/span><\/div>\n<div>\u5728public void setConfiguration(String iface, IpConfiguration config) { \u5e95\u90e8\u589e\u52a0\uff1a<\/div>\n<div>\u8be5\u884c\u4e0b\u9762\uff1a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mTracker.updateIpConfiguration(iface, new IpConfiguration(config));<\/div>\n<div>\u6dfb\u52a0\u4e24\u884c\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mTracker.removeInterface(iface);<\/span><\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mTracker.start();<\/span><\/div>\n<div>\u00a0\u00a0\u00a0\u00a0}<\/div>\n<div><\/div>\n<div><\/div>\n<div><span style=\"color: #ff0000;\">$ vi frameworks\/opt\/net\/ethernet\/java\/com\/android\/server\/ethernet\/EthernetTracker.java<\/span><\/div>\n<div>\u628a<\/div>\n<div>\u00a0\u00a0\u00a0\u00a0private void removeInterface(String iface) {<\/div>\n<div>\u6539\u6210\uff1a<\/div>\n<div><span style=\"color: #800080;\">\u00a0\u00a0\u00a0\u00a0public void removeInterface(String iface) {<\/span><\/div>\n<div><\/div>\n<div><\/div>\n<h3>\u91cd\u65b0\u751f\u6210sdk\u5e93\uff1a<\/h3>\n<div>$ source build\/envsetup.sh<\/div>\n<div>$ lunch full_ac8257_demo-userdebug<\/div>\n<div>$ make update-api<\/div>\n<div>\u91cd\u65b0\u767b\u5f55\u7f16\u8bd1\u7cfb\u7edf\uff1a<\/div>\n<div>$ nohup .\/allmake.sh -i &amp;<\/div>\n<div>\u91cd\u65b0\u751f\u6210sdk\u5e93\uff1a<\/div>\n<div>$ .\/allmake.sh sdklibs<\/div>\n<div>\u751f\u6210\u4f4d\u7f6e\uff1a ac8257-androidP\/sdklibs\/<\/div>\n<div><\/div>\n<div><\/div>\n<h3>\u7136\u540e\u53ef\u4ee5\u5efa\u7acb\u65b0\u7684android\u00a0studio 3.5\u7684app<\/h3>\n<div><strong>\u628a\u751f\u6210\u7684<span style=\"color: #ff0000;\">framework_classes.jar\u00a0\u653e\u5230\u00a0app\/libs<\/span>\u76ee\u5f55\u4e0b\u3002<\/strong><\/div>\n<div>\u7136\u540e\u6e90\u6587\u4ef6\u4e2d\u53ef\u4ee5\u5bfc\u5165\u4ee5\u4e0b\u7c7b\u6587\u4ef6\u4e86\uff1a<\/div>\n<div>import <a href=\"http:\/\/android.net.ethernetmanager%3B\/\">android.net.EthernetManager;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.ipconfiguration%3B\/\">android.net.IpConfiguration;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.linkaddress%3B\/\">android.net.LinkAddress;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.staticipconfiguration%3B\/\">android.net.StaticIpConfiguration;<\/a><\/div>\n<div><\/div>\n<div><strong>\u4fee\u6539AndroidManifest.xml\uff0c\u8bbe\u7f6e\u4e3a\u7cfb\u7edf\u7528\u6237\u6765\u542f\u52a8app\uff08\u5f53\u7136\u9700\u8981<span style=\"color: #ff0000;\">\u7cfb\u7edf\u7b7e\u540d<\/span>\uff09\uff0c\u5e76\u4e14\u8d4b\u4e88\u7f51\u7edc\u8bbf\u95ee\u6743\u9650\uff1a<\/strong><\/div>\n<div>&lt;manifest xmlns:android=&#8221;<a href=\"http:\/\/schemas.android.com\/apk\/res\/android\">http:\/\/schemas.android.com\/apk\/res\/android<\/a>&#8220;<\/div>\n<div>package=&#8221;com.maxshu.forethernetipset&#8221;<\/div>\n<div><span style=\"color: #800080;\">android:sharedUserId=&#8221;android.uid.system&#8221;<\/span>&gt;<\/div>\n<div><\/div>\n<div><span style=\"color: #800080;\">&lt;uses-permission android:name=&#8221;android.permission.ACCESS_NETWORK_STATE&#8221; \/&gt;<\/span><\/div>\n<div><span style=\"color: #800080;\">&lt;uses-permission android:name=&#8221;android.permission.INTERNET&#8221; \/&gt;<\/span><\/div>\n<div><span style=\"color: #800080;\">&lt;uses-permission android:name=&#8221;android.permission.CHANGE_NETWORK_STATE&#8221; \/&gt;<\/span><\/div>\n<div><span style=\"color: #800080;\">&lt;uses-permission android:name=&#8221;android.permission.CONNECTIVITY_INTERNAL&#8221;\/&gt;<\/span><\/div>\n<div><span style=\"color: #800080;\">&lt;uses-permission android:name=&#8221;android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS&#8221;\/&gt;<\/span><\/div>\n<div><\/div>\n<div><strong>\u7136\u540e\u4fee\u6539app\u76ee\u5f55\u4e0b\u9762\u7684build.gradle\uff0c\u5728android {\u00a0\u91cc\u9762\u589e\u52a0\uff1a<\/strong><\/div>\n<div>\/\/\u4e3a\u4e86\u907f\u514d ask :app:mergeExtDexDebug FAILED 65535 \u9519\u8bef\u3002<\/div>\n<div><span style=\"color: #800080;\">compileOptions {<\/span><\/div>\n<div><span style=\"color: #800080;\">sourceCompatibility JavaVersion.VERSION_1_8<\/span><\/div>\n<div><span style=\"color: #800080;\">targetCompatibility JavaVersion.VERSION_1_8<\/span><\/div>\n<div><span style=\"color: #800080;\">}<\/span><\/div>\n<div><\/div>\n<div><strong>\u7136\u540e\u9700\u8981\u4f18\u5148\u4f7f\u7528framework_classes.jar\u91cc\u9762\u7684\u7c7b\uff0c\u800c\u4e0d\u662fandroid\u00a0studio\u9ed8\u8ba4\u7684sdk\u7c7b\uff0c\u5728app\u76ee\u5f55\u4e0b\u9762\u7684build.gradle\u5c3e\u90e8\u589e\u52a0\uff08\u5b9e\u9645\u5c31\u662f\u628aapp.iml\u6587\u4ef6\u7684&lt;orderEntry type=&#8221;jdk&#8221; jdkName=&#8221;Android API 29 Platform&#8221; jdkType=&#8221;Android SDK&#8221;\/&gt;\u8fd9\u4e00\u884c\u632a\u5230\u5176\u5c3e\u90e8\uff09\uff1a<\/strong><\/div>\n<div>preBuild {<\/div>\n<div>doLast {<\/div>\n<div>def imlFile = file(project.name + &#8220;.iml&#8221;)<\/div>\n<div>println &#8216;Change &#8216; + project.name + &#8216;.iml order&#8217;<\/div>\n<div>try {<\/div>\n<div>def parsedXml = (new XmlParser()).parse(imlFile)<\/div>\n<div>def jdkNode = <a href=\"http:\/\/parsedxml.component\/\">parsedXml.component<\/a>[1].orderEntry.find { it.&#8217;@type&#8217; == &#8216;jdk&#8217; }<\/div>\n<div><a href=\"http:\/\/parsedxml.component\/\">parsedXml.component<\/a>[1].remove(jdkNode)<\/div>\n<div>def sdkString = &#8220;Android API &#8221; + <a href=\"http:\/\/android.compilesdkversion.substring\/\">android.compileSdkVersion.substring<\/a>(&#8220;android-&#8220;.length()) + &#8221; Platform&#8221;<\/div>\n<div>new Node(<a href=\"http:\/\/parsedxml.component\/\">parsedXml.component<\/a>[1], &#8216;orderEntry&#8217;, [&#8216;type&#8217;: &#8216;jdk&#8217;, &#8216;jdkName&#8217;: sdkString, &#8216;jdkType&#8217;: &#8216;Android SDK&#8217;])<\/div>\n<div>groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile))<\/div>\n<div>} catch (FileNotFoundException e) {<\/div>\n<div><\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div><strong>\u7136\u540e\u53ef\u4ee5\u53cd\u5c04\u65b9\u5f0f\u4f7f\u7528EthernetManager\u7c7b\u548cIEthernetManager\u7c7b\uff1a<\/strong><\/div>\n<div>package com.maxshu.forethernetipset;<\/div>\n<div><\/div>\n<div>import android.content.Context;<\/div>\n<div>import <a href=\"http:\/\/android.net.ethernetmanager%3B\/\">android.net.EthernetManager;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.ipconfiguration%3B\/\">android.net.IpConfiguration;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.linkaddress%3B\/\">android.net.LinkAddress;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.staticipconfiguration%3B\/\">android.net.StaticIpConfiguration;<\/a><\/div>\n<div>import android.text.TextUtils;<\/div>\n<div>import android.util.Log;<\/div>\n<div><\/div>\n<div><\/div>\n<div><\/div>\n<div>import java.lang.reflect.Constructor;<\/div>\n<div>import java.lang.reflect.Field;<\/div>\n<div>import java.lang.reflect.InvocationTargetException;<\/div>\n<div>import <a href=\"http:\/\/java.net.inetaddress%3B\/\">java.net.InetAddress;<\/a><\/div>\n<div>import <a href=\"http:\/\/java.net.unknownhostexception%3B\/\">java.net.UnknownHostException;<\/a><\/div>\n<div><\/div>\n<div><\/div>\n<div>public class EthernetIP {<\/div>\n<div>private static final String TAG = &#8220;EthernetUtils&#8221;;<\/div>\n<div><\/div>\n<div>\/**<\/div>\n<div>* @param context use Application context is better<\/div>\n<div>* @param ipAddress ip address: like 192.168.1.168<\/div>\n<div>* @param mode : STATIC or DHCP, set static or dhcp ip mode<\/div>\n<div>* @param netmask ip mask, like 255.255.255.0<\/div>\n<div>* @param gateway gateway, like 192.168.1.1<\/div>\n<div>* @param dns1 dns 1<\/div>\n<div>* @param dns2 dns 2, if mode=static, then can use &#8220;&#8221; or null<\/div>\n<div>* eg. dhcp mode: setEthernetIP(ApplicationContext, &#8220;DHCP&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;, &#8220;&#8221;);<\/div>\n<div>* static mode: setEthernetIP(ApplicationContext, &#8220;STATIC&#8221;,<\/div>\n<div>* &#8220;192.168.1.168&#8221;, &#8220;255.255.255.0&#8221;,<\/div>\n<div>* &#8220;192.168.1.1&#8221;, &#8220;114.114.114.114&#8221;, &#8220;8.8.8.8&#8221;);<\/div>\n<div>* for android 9.0<\/div>\n<div>* *\/<\/div>\n<div>public static void SetEthernetIP(Context context, String mode, String ipAddress, String netmask,<\/div>\n<div>String gateway, String dns1, String dns2) {<\/div>\n<div>if (context == null || (!&#8221;STATIC&#8221;.equals(mode) &amp;&amp; !&#8221;DHCP&#8221;.equals(mode))) {<\/div>\n<div>Log.d(TAG, &#8221; setEthernetIP failed, param incorrect context=&#8221; + context + &#8220;, mode=&#8221; + mode);<\/div>\n<div>return;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>try {<\/div>\n<div>\/\/ get EthernetManager instance by reflect @{<\/div>\n<div>Class&lt;?&gt; ethernetManagerClass = Class<\/div>\n<div>.forName(&#8220;<a href=\"http:\/\/android.net.ethernetmanager\/\">android.net.EthernetManager<\/a>&#8220;);<\/div>\n<div>Class&lt;?&gt; iEthernetManagerClass = Class<\/div>\n<div>.forName(&#8220;<a href=\"http:\/\/android.net.iethernetmanager\/\">android.net.IEthernetManager<\/a>&#8220;);<\/div>\n<div>\/\/ \u83b7\u53d6ETHERNET_SERVICE\u53c2\u6570<\/div>\n<div>String ETHERNET_SERVICE = (String) Context.class.getField(<\/div>\n<div>&#8220;ETHERNET_SERVICE&#8221;).get(null);<\/div>\n<div>\/\/ \u83b7\u53d6ethernetManager\u670d\u52a1\u5bf9\u8c61<\/div>\n<div>Object ethernetManager = context.getSystemService(ETHERNET_SERVICE);<\/div>\n<div>\/\/ \u83b7\u53d6\u5728EthernetManager\u4e2d\u7684\u62bd\u8c61\u7c7bmService\u6210\u5458\u53d8\u91cf<\/div>\n<div>Field mService = ethernetManagerClass.getDeclaredField(&#8220;mService&#8221;);<\/div>\n<div>\/\/ \u4fee\u6539private\u6743\u9650<\/div>\n<div>mService.setAccessible(true);<\/div>\n<div>\/\/ \u83b7\u53d6\u62bd\u8c61\u7c7b\u7684\u5b9e\u4f8b\u5316\u5bf9\u8c61<\/div>\n<div>Object mServiceObject = mService.get(ethernetManager);<\/div>\n<div>Object ethernetManagerInstance = ethernetManagerClass<\/div>\n<div>.getDeclaredConstructor(Context.class,<\/div>\n<div>iEthernetManagerClass).newInstance(context,<\/div>\n<div>mServiceObject);<\/div>\n<div>EthernetManager mEthManager = (EthernetManager) ethernetManagerInstance;<\/div>\n<div>\/\/ @}<\/div>\n<div><\/div>\n<div>String[] ifaces = mEthManager.getAvailableInterfaces();<\/div>\n<div>if (ifaces.length &lt;= 0) {<\/div>\n<div>Log.e(TAG, &#8221; setEthernetIP failed ifaces.length &lt;= 0&#8243;);<\/div>\n<div>return;<\/div>\n<div>}<\/div>\n<div>String mInterfaceName = ifaces[0];<\/div>\n<div>Log.d(TAG, &#8221; setEthernetIP mInterfaceName=&#8221; + mInterfaceName);<\/div>\n<div>if (&#8220;DHCP&#8221;.equals(mode)) {<\/div>\n<div>Log.i(TAG, &#8221; setEthernetIP set dhcp started&#8221;);<\/div>\n<div>IpConfiguration dhcpConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.DHCP,<\/div>\n<div>IpConfiguration.ProxySettings.NONE, null, null);<\/div>\n<div>dhcpConfiguration.setIpAssignment(IpConfiguration.IpAssignment.DHCP);<\/div>\n<div>mEthManager.setConfiguration(mInterfaceName, dhcpConfiguration);<\/div>\n<div>return;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>if (TextUtils.isEmpty(ipAddress)<\/div>\n<div>|| TextUtils.isEmpty(netmask)<\/div>\n<div>\/\/ || TextUtils.isEmpty(gateway) || TextUtils.isEmpty(dns1)) {<\/div>\n<div>) {<\/div>\n<div>Log.e(TAG, &#8220;setEthernetIP error has some param is null ipAddress=&#8221; + ipAddress<\/div>\n<div>+ &#8220;, netmask=&#8221; + netmask + &#8220;, gateway=&#8221; + gateway<\/div>\n<div>+ &#8220;, dns1=&#8221; + dns1 + &#8220;, dns2=&#8221; + dns2);<\/div>\n<div>return;<\/div>\n<div>}<\/div>\n<div>StaticIpConfiguration mStaticIpConfiguration = new StaticIpConfiguration();<\/div>\n<div>int prefixLength = NetUtils.MaskStr2InetMask(netmask);<\/div>\n<div>InetAddress inetAddr = null;<\/div>\n<div>InetAddress gatewayAddr = InetAddress.getByName(gateway);<\/div>\n<div>InetAddress dnsAddr = InetAddress.getByName(dns1);<\/div>\n<div><\/div>\n<div>if (TextUtils.isEmpty(ipAddress)) {<\/div>\n<div>inetAddr = InetAddress.getByName(NetUtils.getLocalIpAddress());<\/div>\n<div>} else {<\/div>\n<div>String[] ipStr = ipAddress.split(&#8220;\\\\.&#8221;);<\/div>\n<div>byte[] ipBuf = new byte[4];<\/div>\n<div>for (int i = 0; i &lt; 4; i++) {<\/div>\n<div>ipBuf[i] = (byte) (Integer.parseInt(ipStr[i]) &amp; 0xff);<\/div>\n<div>}<\/div>\n<div>try {<\/div>\n<div>inetAddr = InetAddress.getByAddress(ipBuf);<\/div>\n<div>Log.d(TAG, &#8220;setEthernetIP address correct inetAddr=&#8221; + inetAddr);<\/div>\n<div>} catch (UnknownHostException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>if (inetAddr == null || inetAddr.getAddress().toString().isEmpty()<\/div>\n<div>|| prefixLength == 0<\/div>\n<div>\/\/|| gatewayAddr.toString().isEmpty()<\/div>\n<div>\/\/|| dnsAddr == null || dnsAddr.toString().isEmpty()) {<\/div>\n<div>) {<\/div>\n<div>Log.d(TAG, &#8221; setEthernetIP address incorrect inetAddr=&#8221; + inetAddr);<\/div>\n<div>return;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>Class&lt;?&gt; linkAddressClass = null;<\/div>\n<div>linkAddressClass = Class.forName(&#8220;<a href=\"http:\/\/android.net.linkaddress\/\">android.net.LinkAddress<\/a>&#8220;);<\/div>\n<div>Class[] cl = new Class[]{InetAddress.class, int.class};<\/div>\n<div>Constructor cons = null;<\/div>\n<div>\/\/\u53d6\u5f97\u6240\u6709\u6784\u9020\u51fd\u6570<\/div>\n<div>try {<\/div>\n<div>cons = linkAddressClass.getConstructor(cl);<\/div>\n<div>} catch (NoSuchMethodException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div>\/\/\u7ed9\u4f20\u5165\u53c2\u6570\u8d4b\u521d\u503c<\/div>\n<div>Object[] x = {inetAddr, prefixLength};<\/div>\n<div>try {<\/div>\n<div>mStaticIpConfiguration.ipAddress = (LinkAddress) cons.newInstance(x);<\/div>\n<div>Log.d(TAG, &#8221; setEthernetIP mStaticIpConfiguration.ipAddress=&#8221; + mStaticIpConfiguration.ipAddress);<\/div>\n<div>} catch (InstantiationException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>} catch (IllegalAccessException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>} catch (InvocationTargetException e) {<\/div>\n<div>e.printStackTrace();<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>if(!gateway.isEmpty()) {<\/div>\n<div>mStaticIpConfiguration.gateway = gatewayAddr;<\/div>\n<div>}<\/div>\n<div>if(!dns1.isEmpty()) {<\/div>\n<div>mStaticIpConfiguration.dnsServers.add(dnsAddr);<\/div>\n<div>}<\/div>\n<div>if (!dns2.isEmpty())<\/div>\n<div>mStaticIpConfiguration.dnsServers.add(InetAddress.getByName(dns2));<\/div>\n<div><\/div>\n<div>Log.d(TAG, &#8221; setEthernetIP mStaticIpConfiguration ====&#8221; + mStaticIpConfiguration<\/div>\n<div>+ &#8220;, inetAddr=&#8221; + inetAddr + &#8220;, mEthManager=&#8221; + mEthManager);<\/div>\n<div><\/div>\n<div>IpConfiguration ipConfiguration = new IpConfiguration(IpConfiguration.IpAssignment.STATIC,<\/div>\n<div>IpConfiguration.ProxySettings.NONE, mStaticIpConfiguration, null);<\/div>\n<div>ipConfiguration.setIpAssignment(IpConfiguration.IpAssignment.STATIC);<\/div>\n<div>ipConfiguration.setStaticIpConfiguration(mStaticIpConfiguration);<\/div>\n<div>mEthManager.setConfiguration(mInterfaceName, ipConfiguration);<\/div>\n<div>} catch (Exception e) {<\/div>\n<div>Log.e(TAG, &#8220;setEthernetIP error e=&#8221; + e.getMessage(), e);<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>}<\/div>\n<div><\/div>\n<div><strong>\u518d\u52a0\u4e2a\u8f85\u52a9\u7c7bNetUtils\uff1a<\/strong><\/div>\n<div>package com.maxshu.forethernetipset;<\/div>\n<div><\/div>\n<div>import android.content.Context;<\/div>\n<div>import android.location.LocationManager;<\/div>\n<div>import <a href=\"http:\/\/android.net.connectivitymanager%3B\/\">android.net.ConnectivityManager;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.networkinfo%3B\/\">android.net.NetworkInfo;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.wifi.wifiinfo%3B\/\">android.net.wifi.WifiInfo;<\/a><\/div>\n<div>import <a href=\"http:\/\/android.net.wifi.wifimanager%3B\/\">android.net.wifi.WifiManager;<\/a><\/div>\n<div>import android.telephony.TelephonyManager;<\/div>\n<div><\/div>\n<div>import <a href=\"http:\/\/java.net.inetaddress%3B\/\">java.net.InetAddress;<\/a><\/div>\n<div>import <a href=\"http:\/\/java.net.interfaceaddress%3B\/\">java.net.InterfaceAddress;<\/a><\/div>\n<div>import <a href=\"http:\/\/java.net.networkinterface%3B\/\">java.net.NetworkInterface;<\/a><\/div>\n<div>import <a href=\"http:\/\/java.net.socketexception%3B\/\">java.net.SocketException;<\/a><\/div>\n<div>import java.util.Enumeration;<\/div>\n<div><\/div>\n<div>public class NetUtils {<\/div>\n<div>\/\/ \u7f51\u7edc\u662f\u5426\u53ef\u7528<\/div>\n<div>public static boolean isNetworkAvailable(Context context) {<\/div>\n<div>ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<\/div>\n<div>if (connectivity == null) {<\/div>\n<div>return false;<\/div>\n<div>} else {<\/div>\n<div>NetworkInfo[] info = connectivity.getAllNetworkInfo();<\/div>\n<div>if (info != null) {<\/div>\n<div>for (int i = 0; i &lt; info.length; i++) {<\/div>\n<div>if (info[i].getState() == NetworkInfo.State.CONNECTED) {<\/div>\n<div>return true;<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>return false;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u5f97\u5230\u5f53\u524d\u7f51\u7edc\u7c7b\u578b<\/div>\n<div>public static String getNetWorkType(Context context) {<\/div>\n<div>ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<\/div>\n<div>NetworkInfo networkInfo = manager.getActiveNetworkInfo();<\/div>\n<div>int type = networkInfo.getType();<\/div>\n<div>if (type == ConnectivityManager.TYPE_WIFI) {<\/div>\n<div>return &#8220;wifi&#8221;;<\/div>\n<div>} else if (type == ConnectivityManager.TYPE_MOBILE) {<\/div>\n<div>return &#8220;mobile&#8221;;<\/div>\n<div>}<\/div>\n<div>return &#8220;unknow&#8221;;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/\u5f53\u524d\u7f51\u7edc\u662f\u4e0d\u662fwifi<\/div>\n<div>public static boolean isConnectedByWifi(Context context) {<\/div>\n<div>try {<\/div>\n<div>ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<\/div>\n<div>NetworkInfo ni = manager.getActiveNetworkInfo();<\/div>\n<div>return (ni.getType() == ConnectivityManager.TYPE_WIFI ? true : false);<\/div>\n<div>} catch (Exception e) {<\/div>\n<div><\/div>\n<div>}<\/div>\n<div>return false;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ MOBILE\u7f51\u7edc\u662f\u51e0G\u7f512G\uff1f3G\uff1f4G\uff1f<\/div>\n<div>\/\/ \u8fd4\u56de\u51e0\u5c31\u662f\u51e0G\u7f51<\/div>\n<div>public static int getNetWorkClass(Context context) {<\/div>\n<div>TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);<\/div>\n<div>switch (telephonyManager.getNetworkType()) {<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_GPRS:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_EDGE:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_CDMA:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_1xRTT:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_IDEN:<\/div>\n<div>return 2;<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_UMTS:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_EVDO_0:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_EVDO_A:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_HSDPA:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_HSUPA:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_HSPA:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_EVDO_B:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_EHRPD:<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_HSPAP:<\/div>\n<div>return 3;<\/div>\n<div>case TelephonyManager.NETWORK_TYPE_LTE:<\/div>\n<div>return 4;<\/div>\n<div>default:<\/div>\n<div>return 0;\/\/ unknow<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ wifi\u7f51\u7edc\u662f\u5426\u53ef\u7528<\/div>\n<div>public static boolean isWifiConnected(Context context) {<\/div>\n<div>if (context != null) {<\/div>\n<div>ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<\/div>\n<div>NetworkInfo mWiFiNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);<\/div>\n<div>if (mWiFiNetworkInfo != null) {<\/div>\n<div>return mWiFiNetworkInfo.isAvailable();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>return false;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/mobile\u7f51\u7edc\u662f\u5426\u53ef\u7528<\/div>\n<div>public static boolean isMobileConnected(Context context) {<\/div>\n<div>if (context != null) {<\/div>\n<div>ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);<\/div>\n<div>NetworkInfo mMobileNetworkInfo = mConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);<\/div>\n<div>if (mMobileNetworkInfo != null) {<\/div>\n<div>return mMobileNetworkInfo.isAvailable();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>return false;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u4f7f\u7528MOBILE\u7f51\u7edc\u65f6\u7528\u6765\u83b7\u53d6IP<\/div>\n<div>public static String getLocalIpAddress() {<\/div>\n<div>try {<\/div>\n<div>for (Enumeration&lt;NetworkInterface&gt; en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {<\/div>\n<div>NetworkInterface intf = (NetworkInterface) en.nextElement();<\/div>\n<div>for (Enumeration&lt;InetAddress&gt; enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {<\/div>\n<div>InetAddress inetAddress = (InetAddress) enumIpAddr.nextElement();<\/div>\n<div>if (!inetAddress.isLoopbackAddress())<\/div>\n<div>return inetAddress.getHostAddress().toString();<\/div>\n<div>}<\/div>\n<div>}<\/div>\n<div>} catch (SocketException ex) {<\/div>\n<div>}<\/div>\n<div>return &#8220;0.0.0.0&#8221;;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u4f7f\u7528Wifi\u65f6\u7528\u6765\u83b7\u53d6IP<\/div>\n<div>public static String getWifiIpAddress(Context context) {<\/div>\n<div>WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);<\/div>\n<div>WifiInfo wifiInfo = wifiManager.getConnectionInfo();<\/div>\n<div>int ipAddress = wifiInfo.getIpAddress();<\/div>\n<div>return intToIp(ipAddress);<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u83b7\u53d6wifi\u7684ssid\uff08\u5373wifi\u540d\u79f0\uff09<\/div>\n<div>public static String getWifiSsid(Context context) {<\/div>\n<div>String ssidApn = &#8220;&#8221;;<\/div>\n<div>try {<\/div>\n<div>WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);<\/div>\n<div>WifiInfo wi = wm.getConnectionInfo();<\/div>\n<div>ssidApn = wi.getSSID();<\/div>\n<div>} catch (Exception e) {<\/div>\n<div>}<\/div>\n<div>return ssidApn;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u624b\u673aGPS\u662f\u5426\u5f00\u542f<\/div>\n<div>public static boolean isGpsEnable(Context context) {<\/div>\n<div>LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);<\/div>\n<div>return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>\/\/ \u8fd4\u56de\u8fd0\u8425\u5546\u540d\u5b57<\/div>\n<div>public static String getNetworkOperatorName(Context context) {<\/div>\n<div>TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);<\/div>\n<div>return telephonyManager.getNetworkOperatorName();<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>private static String intToIp(int i) {<\/div>\n<div>return String.format(&#8220;%d.%d.%d.%d&#8221;, (i &amp; 0xff), (i &gt;&gt; 8 &amp; 0xff), (i &gt;&gt; 16 &amp; 0xff), (i &gt;&gt; 24 &amp; 0xff));<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>public static int MaskStr2InetMask(String maskStr){<\/div>\n<div>StringBuffer sb ;<\/div>\n<div>String str;<\/div>\n<div>int inetmask = 0;<\/div>\n<div>int count = 0;<\/div>\n<div>String[] ipSegment = maskStr.split(&#8220;\\\\.&#8221;);<\/div>\n<div><\/div>\n<div>for(int n =0; n&lt;ipSegment.length;n++){<\/div>\n<div>sb = toBin(Integer.parseInt(ipSegment[n]));<\/div>\n<div>str = sb.reverse().toString();<\/div>\n<div>count=0;<\/div>\n<div>for(int i=0; i&lt;str.length();i++){<\/div>\n<div>i=str.indexOf(&#8220;1&#8221;,i);<\/div>\n<div>if(i==-1){<\/div>\n<div>break;<\/div>\n<div>}<\/div>\n<div>count++;<\/div>\n<div>}<\/div>\n<div>inetmask+=count;<\/div>\n<div><\/div>\n<div>}<\/div>\n<div>return inetmask;<\/div>\n<div>}<\/div>\n<div>private static StringBuffer toBin(int x)<\/div>\n<div>{<\/div>\n<div>StringBuffer result = new StringBuffer();<\/div>\n<div>result.append(x % 2);<\/div>\n<div>x \/= 2;<\/div>\n<div>while (x &gt; 0)<\/div>\n<div>{<\/div>\n<div>result.append(x % 2);<\/div>\n<div>x \/= 2;<\/div>\n<div>}<\/div>\n<div>return result;<\/div>\n<div>}<\/div>\n<div><\/div>\n<div>}<\/div>\n<div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u589e\u52a0\u5bf9\u4ee5\u592a\u7f51IP\u5730\u5740\u7684\u914d\u7f6e\uff08app\u7528\u53cd\u5c04\u65b9\u5f0f\u83b7\u53d6EthernetManager\u548cIEthernetManage &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[394,799,91,800,450],"class_list":["post-1073","post","type-post","status-publish","format-standard","hentry","category-linuxandroid","tag-android","tag-eth0","tag-ip","tag-sdk","tag-450"],"views":7426,"_links":{"self":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1073","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1073"}],"version-history":[{"count":1,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1073\/revisions"}],"predecessor-version":[{"id":1074,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/1073\/revisions\/1074"}],"wp:attachment":[{"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1073"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.max-shu.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}