14

我想在我的 Android 4.0 设备上从我的应用程序启用 USB 网络共享?以下代码适用于 Android 2.2,但不适用于 4.0。任何人都可以帮忙吗?

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

    }
4

2 回答 2

1

我有与此类似的代码,它适用于 Android 4.0(但仅适用于某些设备)。不幸的是,对网络共享的访问是非常特定于供应商的。我确实注意到的一件事是您没有使您尝试调用的方法可访问。如果在您使用的设备上,该方法已设为私有,则此方法无效。尝试添加:

method.setAccessible(true);

在你打电话之前

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

另一件事是接口名称(在您的情况下,“usb0”也是特定于供应商的。不同制造商的不同设备上的接口名称不同。确保您为正在测试的设备获得正确的接口名称.

于 2013-04-19T11:32:48.080 回答
0

在我的植根设备上,我得到了它:(xamarin)

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

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

于 2015-10-08T20:31:53.350 回答