Запустить / остановить встроенный Wi-Fi / USB-модем из кода?
Как я могу запустить или остановить встроенную привязку в Android 2.2 из моего приложения?
4 ответа
В закрытом ConnectivityManager
, Как показано выше, вы можете использовать отражение для доступа к нему. Я пробовал это на нескольких телефонах 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
Я ответил на этот вопрос здесь. Короче говоря, это возможно, вот код:
private void setWifiTetheringEnabled(boolean enable) {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
Method[] methods = wifiManager.getClass().getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("setWifiApEnabled")) {
try {
method.invoke(wifiManager, null, enable);
} catch (Exception ex) {
}
break;
}
}
}
Ваше приложение должно иметь следующее разрешение:
android.permission.CHANGE_WIFI_STATE
В Android SDK нет открытых API для управления привязкой - извините!
Я использовал код из Android Как программно включить горячую точку в Android! и я включаю портативную точку доступа для Android 4.2. Вот код
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
// TODO Auto-generated method stub
WifiConfiguration wifi_configuration = null;
wifiManager.setWifiEnabled(false);
try
{
//USE REFLECTION TO GET METHOD "SetWifiAPEnabled"
Method method=wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(wifiManager, wifi_configuration, true);
}
catch (NoSuchMethodException e){
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}