Как я могу включить USB Tethering программным способом на устройстве Android 4.0?
Я хочу включить USB Tethering из моего приложения на моем Android 4.0 Device? Следующий код работает для 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;
}
}
Ответы
Ответ 1
У меня есть код, похожий на этот, и он работает на Android 4.0 (но только на некоторых устройствах). К сожалению, доступ к привязке очень специфичен для поставщиков. Единственное, что я заметил, это то, что вы не делаете метод, который вы пытаетесь назвать доступным. Если на устройствах, которые вы используете, метод был закрыт, это не сработает. Попробуйте добавить:
method.setAccessible(true);
перед вызовом
Integer code = (Integer) method.invoke(cm, "usb0");
Другое дело, что имя интерфейса (в вашем случае "usb0" также зависит от поставщика. Имя интерфейса отличается на разных устройствах от разных производителей. Убедитесь, что у вас есть правильное имя интерфейса для устройства вы тестируете.
Ответ 2
На моем укоренившемся устройстве я получил его с этим: (xamarin)
suProcess = Runtime.GetRuntime().Exec("su root service call connectivity 30 i32 1");
см
https://android.stackexchange.com/info/29954/can-i-change-some-android-settings-from-the-command-line