通过编程方式实现以太网连接(Android)(Root设备)
作者:互联网
我有一个关于以太网的小问题.
我的三个问题是:
>我们可以通过编程方式打开/关闭以太网吗?
>我们可以编程启用/禁用以太网吗?
>我们能以编程方式连接以太网吗?
以上问题是通过Wifi完成的.喜欢
>我们可以通过编程方式开启/关闭Wifi.
>我们可以通过编程方式启用/禁用Wifi.
>我们可以使用WifiManager以编程方式连接Wifi.
android是否提供任何EthernetManager,如WifiManager来处理以太网?
或者,如果这似乎不可行,那么我原来的要求是:
我要澄清的第一件事是“设备已经生根”.
我可以操作设置(默认)吗?就像我不希望除了WIFI和以太网之外的Settings.apk中的任何其他选项.它应该只显示Wifi和以太网.而已.我可以从“设置”中禁用所有选项,还是可以从“设置”中删除所有其他选项?
解决方法:
我将在这里介绍的解决方案是使用反射的hack,并且只适用于root系统.
您的设备可能有流行的android.net.ethernet包.在活动中,试试
Object emInstance = getSystemService("ethernet");
它返回EthernetManager的有效实例或null. Null意味着你运气不好.
另外一项要求可能取决于您的设备:以太网和Wifi可能仅适用于您的设备.您可能需要禁用Wifi以启用以太网,反之亦然.
要通过反射启用以太网,请使用EthernetManager的实例.
要调用的方法是setEthEnabled(启用布尔值)
Class<?> emClass = null;
try {
emClass = Class.forName("android.net.ethernet.EthernetManager");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Object emInstance = getSystemService("ethernet");
Method methodSetEthEnabled = null;
try {
methodSetEthEnabled = emClass.getMethod("setEthEnabled", Boolean.TYPE);
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
methodSetEthEnabled.setAccessible(true);
try {
// new Boolean(true) to enable, new Boolean(false) to disable
methodSetEthEnabled.invoke(emInstance, new Boolean(false));
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您的应用程序清单需要这些权限
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
WRITE_SECURE_SETTINGS权限只能由系统应用获取.该应用程序不需要由系统密钥签名.它可以是任何有效的标志(如常规的Android App Export功能).使用busybox重新安装系统分区以进行写访问,并将apk移至/ system / app文件夹.重新启动设备,它应该工作.
Can we programmatically Connect Ethernet ?
没有接入点可以与Wifi连接.您可以将其配置为DHCP或提供静态值.这当然也可以通过反射来完成.
您将需要EthernetDevInfo类.
以太网管理器和EthernetDevInfo的实际实现可能在Android版本和设备之间略有不同,因为它不必符合公共API(还),甚至可能是自定义版本.
要获取getter和setter列表,您可以使用Introspector或反射.
标签:android-networking,android,ethernet 来源: https://codeday.me/bug/20190928/1827413.html