在安卓上通过程序使USB或Wifi热点功能启用/禁用

20

是否有一种方法可以通过编程在Android手机上启用或禁用USB或WiFi共享功能?也许是Android SDK或NDK中的API,或者任何非UI命令来完成。

提前致谢。


1
有关 USB 共享网络,请参见以下链接: https://dev59.com/2VvUa4cB1Zd3GeqPuIPT#7830747有关 WiFi 共享网络,请参见以下链接: https://dev59.com/g3A75IYBdhLWcg3w794Y - byndhorizon
请检查此链接 https://github.com/abhinay100/wifi-tethering,您将获得完整的 WiFi 共享代码,它可以完美地工作。 - user2852617
2个回答

11

在没有root权限的情况下,我可以在我的应用程序中使用以下代码片段:是可能的不需要 root 访问:

private void setWifiTetheringEnabled(boolean enable) {
    WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);

    Method[] methods = wifiManager.getClass().getDeclaredMethods();
    for (Method method : methods) {
        if (method.getName().equals("setWifiApEnabled")) {
            try {
                method.invoke(wifiManager, null, enable);
            } catch (Exception ex) {
            }
            break;
        }
    }
}

你的应用程序应该具有以下权限:

android.permission.CHANGE_WIFI_STATE

(注:该权限允许您的应用程序更改设备的Wi-Fi状态。)

当我在Nexus S上尝试这个操作,使用的是4.1原版系统时,日志中会出现“无法启动正在运行的supplicant软AP”的错误信息。 - DixieFlatline
看这里的讨论(https://code.google.com/p/android/issues/detail?id=1124),似乎是一个已报告的问题。 - iTech
请注意,此操作在棒棒糖设备上不起作用(已测试至5.1.1),您需要获得Root权限。您将收到一个InvocationTargetException,因为应用程序没有系统权限:android.permission.CONNECTIVITY_INTERNAL。 - vman
这个可以在Oneplus One的6.0.1版本上无需root就能运行。我至少认为它不是特定于ROM的,虽然没有经过验证。 - Victor Häggqvist

10

4
内部应用程序可以执行setUsbTethering(true);,因为它们具有访问MANAGE_USB权限的权限。这与标准开发人员无关。 - JaLoveAst1k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接