How I can enable USB Tethering programmatically on an Android 4.0 device?

柔情痞子 提交于 2019-11-27 13:54:34

问题


I want to enable USB Tethering from my app on my Android 4.0 Device? The following code works for Android 2.2 but it does not work for 4.0. Can anyone help?

int USBTethering(boolean b) {
        try {
            ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            Log.d(tag, "test enable usb tethering");
            Method[] wmMethods = cm.getClass().getDeclaredMethods();
            String str = "";
            if (b)
                str = "tether";
            else
                str = "untether";
            for (Method method : wmMethods) {
                Log.d("in usb tethering method",method.getName()+"<<nn>>");
                if (method.getName().equals(str)) {
                    Log.d(tag, "gg==" + method.getName());
                    Log.d("in if", " case matches "+method.getName()+"and str is "+str);
                    try {
                        Integer code = (Integer) method.invoke(cm, "usb0");
                    //  code = (Integer) method.invoke(cm, "setting TH");
                        Log.d(tag, "code===" + code);
                        return 1;
                    } catch (IllegalArgumentException e) {
                        Log.d(tag, "eroor== gg " + e.toString());
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        Log.d(tag, "eroor== gg " + e.toString());
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        Log.d(tag, "eroor== gg " + e.toString());
                        e.printStackTrace();
                    }
                }
            }
            return 0;

                       } catch (Exception e) {
            Log.e(tag, "" + e);
            return 0;
        }

    }

回答1:


I've got code that is similar to this and it works on Android 4.0 (but only on some devices). Unfortunately, access to tethering is very vendor-specific. The one thing I did notice is that you don't make the method you are trying to call accessible. If, on the devices you are using, the method has been made private, this won't work. Try adding:

method.setAccessible(true);

before you call

Integer code = (Integer) method.invoke(cm, "usb0");

The other thing is that the interface name (in your case "usb0" is also vendor-specific. The interface name is different on different devices from different manufacturers. Make sure that you've got the correct interface name for the device you are testing.




回答2:


On my rooted device i got it working with this: (xamarin)

suProcess = Runtime.GetRuntime().Exec("su root service call connectivity 30 i32 1");

see https://android.stackexchange.com/questions/29954/can-i-change-some-android-settings-from-the-command-line



来源:https://stackoverflow.com/questions/12049547/how-i-can-enable-usb-tethering-programmatically-on-an-android-4-0-device

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!