Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Как программно узнать, что устройство работает в режиме Wi-Fi точки доступа?

Как можно средствами Java узнать, что телефон находиться в режиме "точка доступа"?
Мне необходимо узнать, раздаёт ли телефон Wi-Fi / подключен ли к нему.
Вот код на проверку подключения к Wi-Fi:
public boolean isWiFiOn() { final WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); if(wifi != null) switch(wifi.getWifiState()) { case(WifiManager.WIFI_STATE_DISABLED): case(WifiManager.WIFI_STATE_DISABLING): return false; default: return true; } return false; }
Но этот код возвращает false, если телефон в режиме точки доступа.
Как в таком случае узнать, раздаёт ли он Wi-Fi?


Ответ

Официально узнать нельзя, но Android на то и "андроид", что много чего можно сделать при помощи хаков: Есть спрятанный @hide метод getWifiApState
Method method = wifiManager.getClass().getDeclaredMethod("getWifiApState"); method.setAccessible(true); int actualState = (Integer) method.invoke(wifiManager, (Object[]) null);
Далее actualState сравниваем с такими константами:
public static int WIFI_AP_STATE_DISABLING = 10; //выключается public static int WIFI_AP_STATE_DISABLED = 11; //выключен public static int WIFI_AP_STATE_ENABLING = 12; //включается public static int WIFI_AP_STATE_ENABLED = 13; //включен public static int WIFI_AP_STATE_FAILED = 14; //сломалсо
UPD: ссылка на метод в исходниках:

Комментариев нет:

Отправить комментарий