Начать / остановить встроенный Wi-Fi / USB-модем из кода?

Как я могу запустить или остановить встроенный модем в Android 2.2 из моего приложения?


person Isaac Waller    schedule 08.08.2010    source источник
comment
возможный дубликат API точки доступа Wi-Fi в Android 2.2   -  person Isaac Waller    schedule 26.08.2010


Ответы (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
person Eric Koenders    schedule 07.02.2013

Я ответил на этот вопрос здесь. Короче, возможно, вот код:

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

person iTech    schedule 28.11.2012
comment
Но как проверить, подключен ли клиент к устройству или нет? - person Muhammad Sadiq; 02.01.2015
comment
Я тоже хотел бы это знать. А чтобы отключить модем, вы бы назвали метод setWifiApDisabled? или можно использовать method.invoke(wifiManager, null, disable);? - person SubliemeSiem; 03.02.2015
comment
К сожалению, он больше не работает с API 28 (Oreo). См. Это: medium.com/@jean.creuzedeschatelliers/ - person Geraldo Neto; 29.07.2018

В Android SDK нет общедоступных API-интерфейсов для управления модемом - извините!

person CommonsWare    schedule 08.08.2010

Я использовал код из 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();
}
person joy    schedule 20.09.2013