Как программно включить USB-модем на устройстве Android 4.0?

Я хочу включить USB-модем из моего приложения на устройстве Android 4.0? Следующий код работает для 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;
        }

    }

2 ответа

У меня есть код, который похож на это, и он работает на Android 4.0 (но только на некоторых устройствах). К сожалению, доступ к модему зависит от поставщика. Единственное, что я заметил, это то, что вы не делаете метод, который вы пытаетесь вызвать, доступным. Если на устройствах, которые вы используете, метод стал закрытым, это не сработает. Попробуйте добавить:

method.setAccessible(true);

прежде чем позвонить

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

Другое дело, что имя интерфейса (в вашем случае "usb0" также зависит от производителя. Имя интерфейса отличается на разных устройствах от разных производителей. Убедитесь, что у вас есть правильное имя интерфейса для устройства, которое вы тестируете,

На моем рутированном устройстве я получил его с этим: (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

Другие вопросы по тегам