Я могу перечислить все сети Wi-Fi в диапазоне (используя startScan + SCAN_RESULTS_AVAILABLE_ACTION + getScanResults) и получить их SSID и BSSID значений, но я не могу понять, как определить тип безопасности каждой сети.
В моем основном объекте:
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
registerReceiver(scanReceiver, intentFilter);
((WifiManager)getSystemService(Context.WIFI_SERVICE)).startScan();
В моем объекте scanReceiver:
public void onReceive(Context c, Intent intent) {
if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())){
mainObject.scanComplete();
}
}
И снова в моем основном объекте:
public void scanComplete()
{
List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
for (ScanResult network : networkList)
{
<do stuff>
}
}
Код работает постольку, поскольку в конечном итоге вызывается scanComplete, и я могу успешно перечислить все близлежащие сети Wi-Fi и получить их SSID и BSSID, но я не могу понять, как определить их тип безопасности.
Есть ли способ сделать это?
Заранее спасибо.
Вам необходимо проанализировать строку возможностей ScanResult в методе scanComplete. Согласно документации для разработчиков Android :
ScanResult.capabilities описывает схемы аутентификации, управления ключами и шифрования, поддерживаемые точкой доступа.
Возможно, вы сможете использовать - или, по крайней мере, использовать в качестве примера - статические вспомогательные методы, доступные в классе AccessPointState.
Тип безопасности каждой сети указан в столбце «Возможности» результатов сканирования.
Итак, чтобы получить тип безопасности для вас, добавьте это к своей части кода.
public void scanComplete()
{
List<ScanResult> networkList = ((WifiManager)getSystemService.(Context.WIFI_SERVICE)).getScanResults();
for (ScanResult network : networkList)
{
String Capabilities = network.capabilities;
//Then you could add some code to check for a specific security type.
if(Capabilities.contains("WPA"))
{
// We know there is WPA encryption
}
else if(Capabilities.contains("WEP"))
{
// We know there is WEP encryption
}
else
{
// Another type of security scheme, open wifi, captive portal, etc..
}
}
}
В любом случае, вот небольшой исходный код. Я бы полностью рекомендовал ответ Айя, поскольку он является исключительным и более полным.