2017-07-12 32 views
8

我正在开发一个项目,需要扫描公共Wi-Fi接入点。Android Wi-Fi扫描:从ScanResult筛选打印机

目前,我过滤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列表中,打印机是否真的可以这样显示


UPDATE:并非所有的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名称,但这不会很有效或可靠。

感谢您的任何建议。

+0

检查ScanResult的功能字段是否有帮助。 –

+0

@AshishPathak当然是我尝试过的第一件事情之一。它只显示能力“ESS”,这也是“正常”接入点的能力。 – soey

回答

3

1)并非所有打印机都支持WiFi Direct protocol,惠普支持此功能以及您提及的专有协议(HP Wireless Direct),尽管如果没有惠普软件,您的设备可能不支持此功能。

了解有关连接到Android的WiFi Direct协议的更多信息here

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

+0

感谢您的建议,@auval!我会尝试使用这个,但是,它需要设置另一个回调,我需要验证从广播接收器收到的ScanResults,对不对?我会测试它,但我认为这对这个项目来说会是太多的开销。如果“_ipp”只是一种指示器,我想我也可以过滤以“HP-”开头的SSID或类似的东西 – soey

+0

我指出你的API(P2P)会显示支持WiFi直连的设备。使用您使用标准WiFi管理器获得的列表来获取所有设备的列表,然后您可以使用P2P API来减去打印机(比较SSID)。 – auval

+0

SSID不是你可以依赖的东西。 “HP-”“可能与任何HP硬件有关,不一定是打印机。 – auval