Android Wi-Fi扫描:从ScanResult筛选打印机

11

我正在处理一个项目,需要扫描公共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 无线直连 功能(例如请参见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 名称,但这不会非常高效或可靠。

感谢所有建议。


检查ScanResult的capabilities字段是否有任何帮助。 - Ashish Pathak
@AshishPathak 那当然是我尝试过的第一件事。它只显示能力“ESS”,这也是“正常”接入点的能力。 - soey
2个回答

4

1) 并非所有的打印机都支持WiFi Direct protocol,HP支持这一协议,并且他们自己的专有协议(你提到的HP Wireless Direct),不过你的设备可能没有安装HP软件就无法支持它。

在Android上了解如何连接WiFi Direct protocol请点击此处

2) WiFi直接发现会返回String fullDomain,如果包含_ipp则很可能是打印机。


感谢您的建议,@auval!我会尝试使用这个,但是它需要设置另一个回调函数,我需要验证从广播接收器接收到的ScanResults。对于这个项目来说,我认为这将是太多的开销,但我会测试一下。如果“_ipp”只是一种指示符,我想我也可以过滤以“HP-”开头的SSID。 - soey
我指向你的API(P2P)将显示支持WiFi直连的设备。使用标准WiFi管理器获取设备列表,然后可以使用P2P API来排除打印机(比较SSID)。 - Amir Uval
SSID不是你可以依赖的东西。 "HP-"可能与任何惠普硬件相关,不一定是打印机。 - Amir Uval

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接