В 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