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.

Подробнее о подключении к прямому протоколу Wi-Fi от Android здесь.

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

Ответ 2

Я обнаружил, что есть свойство, хорошее для фильтрации.

WifiP2pDevice.primaryDeviceType

Вы можете найти тип устройства здесь: https://ndeflib.readthedocs.io/en/stable/records/wifi.html#primary-device-type

enter image description here


отредактированный

Он обнаружил, что primaryDeviceType представляет собой строку чисел, подобную этой: 7-0050f204-1

Пожалуйста, обратитесь к спецификации Wifi Alliance по этой ссылке: https://www.wi-fi.org/file/wi-fi-simple-configuration-technical-specification-v206