2011-08-03 6 views
2

Je souhaite obtenir une liste de tous les périphériques de la zone.Comment obtenir des périphériques Bluetooth couplés dans la zone

Pour cela, je demande les périphériques collés avec getBondedDevices() et ensuite faire une découverte. Mais cela me donne la liste de tous les dispositifs collés (dans la zone ou non) et ceux qui sont détectables. Et si je fais juste la découverte (sans utiliser getBondedDevices()) je ne reçois pas les périphériques liés dans la zone. Donc je veux obtenir une liste avec les périphériques collés (mais seulement ceux dans la région) et les dispositifs découvrables.

Merci pour l'aide

Répondre

1

Il n'y a pas d'API directe pour cela, vous pouvez comparer les dispositifs communs et retournés par la découverte et getBondedDevices pour trouver des dispositifs liés à proximité et qui sont visibles/découvrable.

1

Les périphériques Bluetooth que j'ai ne sont pas détectables une fois qu'ils sont liés, ce qui explique pourquoi la découverte ne les répertorie pas. C'est la nature des appareils (personne d'autre ne peut utiliser un appareil si vous l'utilisez déjà), pas une limitation de l'API Android. Il est donc probable que la seule façon d'obtenir une liste complète des périphériques dans la zone est d'essayer d'ouvrir une connexion à chaque périphérique collé pour voir s'il se trouve dans la zone et de fusionner ce sous-ensemble avec la liste détectable. C'est une façon indirecte, mais je n'ai pas pu trouver un autre moyen. Je pense que la façon dont les autres logiciels traitent cela est de séparer les listes collées et découvrables et de faire en sorte que l'utilisateur détermine quels sont les périphériques collés qui leur sont chers (connus pour être dans leur portée par leur connaissance personnelle).

+0

Sur Android 2.2 quand je fais la découverte je reçois également des dispositifs qui sont liés/appairés. Quelle (s) version (s) d'Android avez-vous testée? – zeitkunst

+0

Les appareils auxquels je faisais référence ignorent réellement les demandes de découverte lorsqu'elles sont jumelées, ce qui est indépendant d'Android. Il se trouve que j'ai testé Android 1.6 et 2.2, mais j'ai appris cela à cause du firmware que j'ai écrit pour un appareil médical qui utilise des périphériques Bluetooth. Bien sûr, cela dépend de l'appareil, donc les appareils Bluetooth que vous avez testés se comportent différemment. – Klox

+0

Je vais essayer de cette façon alors. En fait mon programme est aussi une application médicale qui se connecte à d'autres appareils par Bluetooth. L'utilisateur doit choisir le périphérique qu'il veut connecter, c'est pourquoi il semble inutile de montrer tous les périphériques liés qui ne sont pas dans la zone, ce qui pourrait me beaucoup d'entre eux. – Nemesis

2

La façon dont j'ai résolu cela était d'essayer de me connecter à l'appareil. Cela semble fonctionner tant que l'appareil en question écoute réellement une connexion. Si vous ne savez pas quel type d'appareil vous utilisez, vous devez rechercher les services disponibles. C'est un peu bizarre car il semble que vous ne pouvez appeler les getUuids qu'en utilisant la réflexion. Voir le code ci-dessous.

try { 
    Method method = device.getClass().getMethod("getUuids"); /// get all services 
    ParcelUuid[] parcelUuids = (ParcelUuid[]) method.invoke(device); /// get all services 

    BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(parcelUuids[0].getUuid()); ///pick one at random 
    socket.connect(); 
    socket.close(); 
} catch (Exception e) { 
    Log.e("BluetoothPlugin", device.getName() + "Device is not in range"); 
} 
Questions connexes