Android Wi-Fi Scan: фильтр принтеров от ScanResult

Я работаю над проектом, который должен сканировать общественные точки доступа Wi-Fi.

В настоящее время я фильтрую ScanResult такой:

for (ScanResult scanResult : wifiList) {
  if (!(scanResult.capabilities.contains("WEP") || 
        scanResult.capabilities.contains("WPA") || 
        scanResult.capabilities.contains("WPA2"))) {

              openWifiList.add(scanResult);    

  }
}

он работает нормально, за исключением того, что я также получаю принтеры, которые находятся рядом.

во время сканирования телефон не подключен к сети.

Я бы предположил, что я получаю список, который идентичен списку соединений Wi-Fi, который показан в настройках Wi-Fi на Android. Но в Настройка Wi-Fi принтер не отображается никогда.

так для 1) я думаю, что странно, что принтеры появляются в ScanResult список в все, должны ли принтеры действительно быть видны таким образом?


обновление: не все принтеры Wi-Fi видны, у меня есть некоторые намеки на это, и похоже, что принтеры, которые появляются, имеют специальную функциональность, например, принтеры HP поддерживают HP Wireless Direct функциональность (см. например https://h30434.www3.hp.com/t5/Inkjet-Printing/Printer-SSID-appearing-on-my-wi-fi-list/td-p/1705073 и https://support.hp.com/rs-en/document/c04577030).


и 2) есть ли способ, которым я мог бы проверить, является ли ScanResult принадлежит принтера?

до сих пор я мог думать только о фильтрации для общих имен SSID, но это не будет очень эффективным или надежным.

спасибо для любых предложений.

1 ответов


1) Не все принтеры поддерживают протокол WiFi Direct, HP поддерживает это, а также их собственный протокол, который вы упомянули (HP Wireless Direct), хотя ваше устройство, вероятно, не поддерживает его без программного обеспечения HP.

Узнайте больше о подключении к протоколу WiFi Direct с Android здесь.

2) WiFi direct discovery возвращает String fullDomain, если он содержит _ipp - это, скорее всего, принтер.