通过编程方式实现以太网连接(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或反射.

上一篇:[笔记] MAC突然无法使用Ethernet上网


下一篇:以太网帧结构