如何从我的应用程序启动或停止 Android 2.2 中的内置网络共享?

最佳答案

ConnectivityManager 中有一个非公开的 Tethering API。如上所示,您可以使用反射来访问它。我在许多 Android 2.2 手机上尝试过这个,它适用于所有手机(我的 HTC 开启了网络共享,但没有在状态栏中显示这个......,所以从另一端检查)。下面是一些粗略的代码,它发出调试内容并打开 usb0 上的网络共享。

ConnectivityManager cman = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

Method[] methods = cman.getClass().getDeclaredMethods();
for (Method method : methods) {
    if (method.getName().equals("getTetherableIfaces")) {
        try {
            String[] ifaces = (String[]) method.invoke(cman);
            for (String iface : ifaces) {
                Log.d("TETHER", "Tether available on " + iface);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (method.getName().equals("isTetheringSupported")) {
        try {
            boolean supported = (Boolean) method.invoke(cman);
            Log.d("TETHER", "Tether is supported: " + (supported ? "yes" : "no"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (method.getName().equals("tether")) {
        Log.d("TETHER", "Starting tether usb0");
        try {
            int result = (Integer) method.invoke(cman, "usb0");
            Log.d("TETHER", "Tether usb0 result: " + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

请注意:此代码需要以下权限才能工作:
android.permission.ACCESS_NETWORK_STATE
android.permission.CHANGE_NETWORK_STATE

关于android - 从代码开始/停止内置 Wi-Fi/USB 网络共享?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3436280/

10-10 01:52