Android Wi-Fi 扫描:从 ScanResult 过滤打印机
Android Wi-Fi Scan: Filter printers from ScanResult
我正在做一个项目,需要扫描 public 个 Wi-Fi 接入点。
目前,我正在像这样过滤 ScanResult
:
for (ScanResult scanResult : wifiList) {
if (!(scanResult.capabilities.contains("WEP") ||
scanResult.capabilities.contains("WPA") ||
scanResult.capabilities.contains("WPA2"))) {
openWifiList.add(scanResult);
}
}
它工作正常,除了我也有附近的打印机。
扫描时,phone 未连接到任何网络。
我本以为我得到的列表与 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/1705073 and https://support.hp.com/rs-en/document/c04577030)。
和 2) 有什么方法可以检查 ScanResult
是否属于打印机?
到目前为止,我只能想到过滤常见的 SSID 名称,但这不会非常有效或可靠。
感谢您的任何建议。
1) 并非所有打印机都支持 WiFi Direct protocol,HP 支持此协议以及您提到的他们的专有协议 (HP Wireless Direct),但如果没有 HP 软件,您的设备可能不支持它。
从 Android here.
了解有关连接到 WiFi Direct 协议的更多信息
2) WiFi direct discovery returns String fullDomain
,如果它包含 _ipp
- 那很可能是打印机。
我发现有一个属性,适合过滤
WifiP2pDevice.primaryDeviceType
您可以在此处找到设备类型:
https://ndeflib.readthedocs.io/en/stable/records/wifi.html#primary-device-type
已编辑
发现primaryDeviceType是这样一串数字:
7-0050f204-1
请参考此link中的Wifi联盟规范:
https://www.wi-fi.org/file/wi-fi-simple-configuration-technical-specification-v206
我正在做一个项目,需要扫描 public 个 Wi-Fi 接入点。
目前,我正在像这样过滤 ScanResult
:
for (ScanResult scanResult : wifiList) {
if (!(scanResult.capabilities.contains("WEP") ||
scanResult.capabilities.contains("WPA") ||
scanResult.capabilities.contains("WPA2"))) {
openWifiList.add(scanResult);
}
}
它工作正常,除了我也有附近的打印机。
扫描时,phone 未连接到任何网络。
我本以为我得到的列表与 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/1705073 and https://support.hp.com/rs-en/document/c04577030)。
和 2) 有什么方法可以检查 ScanResult
是否属于打印机?
到目前为止,我只能想到过滤常见的 SSID 名称,但这不会非常有效或可靠。
感谢您的任何建议。
1) 并非所有打印机都支持 WiFi Direct protocol,HP 支持此协议以及您提到的他们的专有协议 (HP Wireless Direct),但如果没有 HP 软件,您的设备可能不支持它。
从 Android here.
了解有关连接到 WiFi Direct 协议的更多信息2) WiFi direct discovery returns String fullDomain
,如果它包含 _ipp
- 那很可能是打印机。
我发现有一个属性,适合过滤
WifiP2pDevice.primaryDeviceType
您可以在此处找到设备类型: https://ndeflib.readthedocs.io/en/stable/records/wifi.html#primary-device-type
已编辑
发现primaryDeviceType是这样一串数字: 7-0050f204-1
请参考此link中的Wifi联盟规范: https://www.wi-fi.org/file/wi-fi-simple-configuration-technical-specification-v206