Получить информацию о 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 в приложении Android с помощью Java:
1. Во-первых, вам нужно будет добавить разрешения в файл AndroidManifest.xml. Эти разрешения позволяют вашему приложению получать доступ к функциям Wi-Fi устройства.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
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);
Надеюсь, эта статья вам поможет!
Дайте мне знать, если у вас есть вопросы, в комментариях к посту.