Есть ли способ проверить, активен ли модем?

Могу ли я программно проверить, активирован ли модем на устройстве Android?

Я только что посмотрел класс WifiManager. Все переменные из WifiInfo показывают те же значения, что и в том случае, если WIFI выключен на устройстве.

Спасибо, с уважением


person softwaresupply    schedule 04.11.2011    source источник
comment
Функциональность привязки находится в классе ConnectivityManager, но скрыта и отсутствует в общедоступном API. Если вы собираетесь использовать неопубликованный API, вам понадобится модифицированный JAR-файл фреймворка или используйте отражение. Метод, который вы ищете, вероятно, String[] ConnectivityManager#getTetheredIfaces(), который возвращает текущие привязанные сетевые интерфейсы.   -  person Jens    schedule 04.11.2011


Ответы (2)


Попробуйте использовать отражение, например:

WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
Method[] wmMethods = wifi.getClass().getDeclaredMethods();
for(Method method: wmMethods){
if(method.getName().equals("isWifiApEnabled")) {

try {
  method.invoke(wifi);
} catch (IllegalArgumentException e) {
  e.printStackTrace();
} catch (IllegalAccessException e) {
  e.printStackTrace();
} catch (InvocationTargetException e) {
  e.printStackTrace();
}
}

(Он возвращает Boolean)


Как предложил Деннис, лучше использовать это:

    final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled");
    method.setAccessible(true); //in the case of visibility change in future APIs
    return (Boolean) method.invoke(manager);

(менеджер WiFiManager)

person Reno    schedule 04.11.2011
comment
Нет необходимости перебирать все объявленные методы: класс Class имеет метод getDeclaredMethod. Проверьте код в моем ответе. - person Denis Gladkiy; 11.12.2013

Во-первых, вам нужно получить WifiManager:

Context context = ...
final WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);

Потом:

public static boolean isSharingWiFi(final WifiManager manager)
{
    try
    {
        final Method method = manager.getClass().getDeclaredMethod("isWifiApEnabled");
        method.setAccessible(true); //in the case of visibility change in future APIs
        return (Boolean) method.invoke(manager);
    }
    catch (final Throwable ignored)
    {
    }

    return false;
}

Также вам необходимо запросить разрешение в AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
person Denis Gladkiy    schedule 06.12.2013
comment
Какова цель всех финалов? Требуются ли они в некоторых случаях? - person diedthreetimes; 31.03.2015
comment
@diedthreetimes: Какова цель всех финалов? Требуются ли они в некоторых случаях? — Стиль кодирования, каждый свой. См. раздел следует ли использовать final и последнее оскорбление. - person Daniel; 01.07.2015
comment
Небольшое дополнение: нужно проверить, вернул ли getSystemService значение null. - person Denis Gladkiy; 19.05.2017