android - 通过编程方式 (Android) 的以太网连接( Root设备)

标签 android ethernet android-networking

我有一个关于以太网的小问题。

我的三个问题是:

  1. 我们能否以编程方式开启/关闭以太网

  2. 我们能否以编程方式启用/禁用以太网

  3. 我们能否以编程方式连接以太网

以上问题都是用Wifi完成的。喜欢

  1. 我们可以通过编程方式开启/关闭Wifi

  2. 我们可以通过编程方式启用/禁用 Wifi

  3. 我们可以使用 WifiManager 以编程方式连接 Wifi

android 是否提供任何 EthernetManagerWifiManager 来处理 Ethernet

或者,如果这似乎不可行,那么我最初的要求是:

我要明确的第一件事是“DEVICE IS ROOTED”。

我可以操作设置(默认)吗?除了 WIFIEthernet 之外,我不想要 Settings.apk 中的任何其他选项。它应该只显示 WifiEthernet。而已。我可以从“设置”中禁用所有选项,还是可以从“设置”中删除所有其他选项?

最佳答案

我将在此处介绍的解决方案是使用反射的 hack,并且仅适用于 Root过的 android 系统。

您的设备可能有流行的 android.net.ethernet 包。在 Activity 中,尝试

Object emInstance = getSystemService("ethernet");

它返回一个有效的 EthernetManager 实例或 null。 Null 表示你运气不好。

附加要求可能取决于您的设备:以太网和 Wifi 可能只能单独使用。您可能需要禁用 Wifi 才能启用以太网,反之亦然。

要通过反射启用以太网,请使用您的 EthernetManager 实例。 你要调用的方法是setEthEnabled(boolean enabled)

    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();
    }

您的应用 list 需要这些权限

<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

WRITE_SECURE_SETTINGS 权限只能由系统应用获取。该应用程序不需要由系统 key 签名。它可以是任何有效的标志(如常规的 Android 应用程序导出功能)。使用 busybox 重新挂载系统分区以进行写访问,并将您的 apk 移动到/system/app 文件夹中。重新启动设备,它应该可以工作了。

Can we programmatically Connect Ethernet ?

没有接入点可以像 Wifi 一样连接您。您可以为 DHCP 配置它或提供静态值。这当然也可以通过反射来完成。 为此,您将需要 EthernetDevInfo 类。

EthernetManager 和 EthernetDevInfo 的实际实现可能在 Android 版本和设备之间略有不同,因为它不必(目前)符合公共(public) api,甚至可能是自定义版本。 要获取 getter 和 setter 列表,您可以使用 Introspector或一般的反射。

关于android - 通过编程方式 (Android) 的以太网连接( Root设备),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21746192/

相关文章:

安卓: "change/intercept network settings and traffic"权限

android - 尝试将数据绑定(bind)提供的上下文变量与 BaseObservable 一起使用时出错

android - Android扫描经典蓝牙设备时如何获取原始扫描记录(广告包)?

java - 有什么方法可以将我的 java 代码转换为 kotlin 吗?

protocols - 可靠多播的最有效协议(protocol)是什么?

go - 连接器 : Error connecting to a physical device

java - 如何以编程方式将图像添加到 Android PopupMenu()?

c# - 如何扫描网络以查找特定外设

android - 如何通过android中的特定应用程序分别查找wifi和网络数据使用情况?

java - 如何在尝试执行注册 Activity 时修复 Android 中的 "com.android.Volley.TimeoutError"