1.首先初始化mINetworkManagementServiceProxy
// INetworkManagementService mNwService;
Object mINetworkManagementServiceProxy;
public void init() {
// IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
// mNwService = INetworkManagementService.Stub.asInterface(b);
try {
Class<?> smClass = Class.forName("android.os.ServiceManager");
Method getService = smClass.getMethod("getService", new Class[]{String.class});
getService.setAccessible(true);
IBinder networkManagementBinder = (IBinder) getService.invoke(null, new Object[]{"network_management"});
Class<?> iNMSClass = Class.forName("android.os.INetworkManagementService$Stub");
Method asInterface = iNMSClass.getMethod("asInterface", new Class[]{IBinder.class});
asInterface.setAccessible(true);
mINetworkManagementServiceProxy = asInterface.invoke(null, new Object[]{networkManagementBinder});
Log.d("Debug", "init: mINetworkManagementServiceProxy = " + mINetworkManagementServiceProxy);
} catch (Throwable e) {
Log.d("Debug", "init: get INetworkManagementServiceProxy failed !!! ");
}
}
2.初始化完成后,打开关闭eth0
//打开有线网
private void openEth0() {
try {
Method setInterfaceUp = mINetworkManagementServiceProxy.getClass().getMethod("setInterfaceUp", new Class[]{String.class});
setInterfaceUp.setAccessible(true);
setInterfaceUp.invoke(mINetworkManagementServiceProxy, "eth0");
} catch (Throwable e) {
Log.d("Debug", "openEth0: failed !!! ");
}
}
//禁用有线网
private void closeEth0() {
try {
Method setInterfaceDown = mINetworkManagementServiceProxy.getClass().getMethod("setInterfaceDown", new Class[]{String.class});
setInterfaceDown.setAccessible(true);
setInterfaceDown.invoke(mINetworkManagementServiceProxy, "eth0");
} catch (Throwable e) {
Log.d("Debug", "closeEth0: failed !!! ");
}
}
如果报错,抛出安全异常的话,需要添加权限:(我没有添加也是可以的)
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
<uses-permission android:name="android.permission.NETWORK_STACK" />
<uses-permission android:name="android.permission.MAINLINE_NETWORK_STACK" />
可能只有system app可以使用,但不确定,待验证!