2017-07-12 3 views
8

Je travaille sur un projet qui doit rechercher des points d'accès Wi-Fi publics.Android Wi-Fi Scan: Filtrer les imprimantes à partir de ScanResult

Actuellement, je suis le filtrage ScanResult comme ceci:

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

       openWifiList.add(scanResult);  

    } 
} 

Il fonctionne très bien, sauf que je reçois aussi des imprimantes qui sont à proximité.

Lors de la numérisation, le téléphone n'est connecté à aucun réseau.

Je suppose que j'obtiens une liste qui est identique à la liste des connexions Wi-Fi qui est affichée dans les paramètres Wi-Fi sur Android. Mais dans le paramètre Wi-Fi, aucune imprimante ne s'affiche.

Donc, pour 1) Je pense qu'il est étrange que les imprimantes apparaissent dans la liste ScanResult du tout, cette façon devrait imprimantes être vraiment visible?


MISE À JOUR: pas toutes les imprimantes Wi-Fi sont visibles, je suis arrivé quelques conseils à ce sujet, et il semble que les imprimantes qui font leur apparition, ont une fonctionnalité spéciale, par exemple Les imprimantes HP prennent en charge la fonctionnalité HP Wireless Direct (voir par exemple https://h30434.www3.hp.com/t5/Inkjet-Printing/Printer-SSID-appearing-on-my-wi-fi-list/td-p/1705073 et https://support.hp.com/rs-en/document/c04577030).


Et 2) est-il possible que je puisse vérifier si le ScanResult appartient à une imprimante? Jusqu'à présent, je ne pouvais penser qu'au filtrage des noms SSID courants, mais cela ne serait pas très efficace ni fiable.

Merci pour vos suggestions.

+0

Vérifiez si le champ de capacités de ScanResult peut vous aider. –

+0

@AshishPathak c'était bien sûr l'une des premières choses que j'ai essayées. Il montre seulement la capacité "ESS" qui est aussi une capacité de points d'accès "normaux". – soey

Répondre

3

1) Toutes les imprimantes ne prennent pas en charge le WiFi Direct protocol, HP le prend en charge ainsi que leur protocole propriétaire (HP Wireless Direct), bien que votre appareil ne le supporte probablement pas sans le logiciel HP.

En savoir plus sur la connexion au protocole WiFi Direct à partir d'Android here. 2) WiFi direct discovery renvoie String fullDomain, s'il contient _ipp - c'est probablement une imprimante.

+0

merci pour les suggestions, @auval! Je vais essayer d'utiliser celui-ci, cependant, il faudrait pour configurer un autre rappel, que je dois d'une manière ou d'une autre valider avec le ScanResults reçu du récepteur de diffusion, non? Je vais le tester, mais je pense que ce sera trop lourd pour ce projet .. Si le "_ipp" est seulement un indicateur, je pense que je pourrais aussi juste filtrer les SSID qui commencent par "HP-" ou quelque chose comme ça – soey

+0

L'API que je vous ai indiquée (P2P) affichera les équipements prenant en charge la connexion Wi-Fi directe. Utilisez la liste que vous avez obtenue avec le gestionnaire WiFi standard pour obtenir la liste de tous les périphériques, puis vous pouvez utiliser l'API P2P pour soustraire les imprimantes (en comparant le SSID). – auval

+0

SSID n'est pas quelque chose que vous pouvez compter. "HP-" "est probablement lié à tout matériel HP, pas nécessairement aux imprimantes. – auval