Android Wi-Fi扫描:从ScanResult过滤打印机

时间:2017-07-12 10:16:40

标签: android android-wifi wifimanager network-printers

我正在开发一个需要扫描公共Wi-Fi接入点的项目。

目前,我正在过滤ScanResult,如下所示:

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

              openWifiList.add(scanResult);    

  }
}

它工作正常,除了我还有附近的打印机。

扫描时,手机未连接到任何网络。

我原以为我得到的列表与Android上的Wi-Fi设置中显示的Wi-Fi连接列表相同。但在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/1705073https://support.hp.com/rs-en/document/c04577030)。

并且2)有什么方法可以检查ScanResult是否属于打印机

到目前为止,我只能考虑过滤常见的SSID名称,但这样做效率不高或不可靠。

感谢您的任何建议。

2 个答案:

答案 0 :(得分:3)

1)并非所有打印机都支持WiFi Direct protocol,HP支持此功能以及您提到的专有协议(HP Wireless Direct),尽管您的设备可能在没有HP软件的情况下不支持它

详细了解如何从Android here连接到WiFi Direct协议。

2)WiFi direct discovery返回String fullDomain,如果它包含_ipp - 那很可能是打印机。

答案 1 :(得分:0)

我发现有一个属性,很适合过滤。

WifiP2pDevice.primaryDeviceType

您可以在此处找到设备类型: https://ndeflib.readthedocs.io/en/stable/records/wifi.html#primary-device-type

enter image description here


已编辑

发现primaryDeviceType是一个数字字符串,如下所示: 7-0050f204-1

请参阅此链接中的Wifi联盟规格: https://www.wi-fi.org/file/wi-fi-simple-configuration-technical-specification-v206