Как можно средствами 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: ссылка на метод в исходниках:
Комментариев нет:
Отправить комментарий