Точка доступа wifi java

Как программно узнать, что устройство работает в режиме 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?

1 ответ 1

Официально узнать нельзя, но 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: ссылка на метод в исходниках:

Источник

Получить информацию о Wi-Fi программно на Android на Java.

Получить информацию о Wi-Fi программно на Android на Java.

Чтобы получить информацию о точке доступа Wi-Fi (также известное как SSID или идентификатор набора услуг) с помощью языка программирования Java в приложении Android, вам следует использовать Android Wi-Fi API. Это API позволяет получить доступ к функциям Wi-Fi устройства Android, включая сканирование доступных сетей Wi-Fi, подключение к сети Wi-Fi и получение SSID подключенной в данный момент сети Wi-Fi.

@android_its – уроки по Android разработке с нуля до профи в телеграме.

Читайте также:  Маршрутизаторы wi fi 5 ггц

Вот пример того, как получить имя точки доступа Wi-Fi в приложении Android с помощью Java:

1. Во-первых, вам нужно будет добавить разрешения в файл AndroidManifest.xml. Эти разрешения позволяют вашему приложению получать доступ к функциям Wi-Fi устройства.

2. Далее вам нужно будет импортировать следующие классы:

import android.net.wifi.WifiManager; import android.net.wifi.WifiInfo;

3. В Activitty или Fragment получите ссылку на объект WifiManager:

WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE)

4. Используйте объект WifiManager для получения объекта WifiInfo, который содержит информацию о подключенной в данный момент сети WiFi:

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

Используйте объект WifiInfo, чтобы получить SSID подключенной в данный момент сети Wi-Fi:

String wifiname = wifiInfo.getSSID(); 

Если устройство в данный момент не подключено к сети Wi-Fi, метод getSSID() вернет нулевое значение. Также в результате getSSID могут быть кавычки, что выглядит не очень красиво, их тоже лучше убрать. Я резюмирую все шаги в следующем примере:

public String myGetWifiName(Context context) < String wifiname = null; try < WifiManager manager = (WifiManager) context.getApplicationContext().getSystemService(WIFI_SERVICE); if (manager.isWifiEnabled()) < WifiInfo wifiInfo = manager.getConnectionInfo(); if (wifiInfo != null) < NetworkInfo.DetailedState state = WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()); if (state == NetworkInfo.DetailedState.CONNECTED || state == NetworkInfo.DetailedState.OBTAINING_IPADDR) < wifiname = wifiInfo.getSSID(); if (wifiname.startsWith("\"") && wifiname.endsWith("\"")) wifiname = wifiname.substring(1, wifiname.length() - 1); Log.d("WifiName", "WifiName is: " + wifiname); return wifiname; >> > > catch (Exception e) < >return ""; > 

В некоторых случаях ваш телефон может переключаться между разными сетями Wi-Fi, и лучше, чтобы ваше приложение получало уведомление об этом. Это эффективнее, чем когда ваше приложение, постоянно посылает запросы .

В этом случае вам нужно создать класс BroadcastReceiver:

public class WifiBroadcastReceiver extends BroadcastReceiver < @Override public void onReceive(Context context, Intent intent) < String action = intent.getAction(); if (WifiManager.SUPPLICANT_STATE_CHANGED_ACTION.equals(action)) < SupplicantState state = intent.getParcelableExtra(WifiManager.EXTRA_NEW_STATE); if (SupplicantState.isValidState(state) && state == SupplicantState.COMPLETED) < wifiname = myGetWifiName(context); //notified each of your listners Iterator it = mWifiListeners.iterator(); while(it.hasNext())< WiFiNameChangeListener listerner = (WiFiNameChangeListener) it.next(); listerner.wifiNameChanged(wifiname); >> > > >

А затем зарегистрируйте его в Activity:

BroadcastReceiver broadcastReceiver = new WifiBroadcastReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); context.registerReceiver(broadcastReceiver, intentFilter); 

Надеюсь, эта статья вам поможет!

Читайте также:  Tab a7 lite wifi 32gb

Дайте мне знать, если у вас есть вопросы, в комментариях к посту.

Источник

Оцените статью
Adblock
detector