我有一个关于以太网的小问题。
我的三个问题是:
我们能否以编程方式开启/关闭
以太网
?我们能否以编程方式启用/禁用
以太网
?我们能否以编程方式连接
以太网
?
以上问题都是用Wifi
完成的。喜欢
我们可以通过编程方式开启/关闭
Wifi
。我们可以通过编程方式启用/禁用
Wifi
。我们可以使用
WifiManager
以编程方式连接Wifi
。
android 是否提供任何 EthernetManager
像 WifiManager
来处理 Ethernet
?
或者,如果这似乎不可行,那么我最初的要求是:
我要明确的第一件事是“DEVICE IS ROOTED”。
我可以操作设置(默认)吗?除了 WIFI
和 Ethernet
之外,我不想要 Settings.apk
中的任何其他选项。它应该只显示 Wifi
和 Ethernet
。而已。我可以从“设置”中禁用所有选项,还是可以从“设置”中删除所有其他选项?
最佳答案
我将在此处介绍的解决方案是使用反射的 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/