Bluetooth “hors bande” (OOB) appariement sur Android?
J'ai été chercher sur internet et n'ai rien vu dans la façon de comment exactement mettre en œuvre OOB de couplage. J'espérais que quelqu'un ici pourrait m'indiquer un exemple de code pour m'aider. L'exemple de discussion dans le site des développeurs Android n'a pas vraiment de plonger dans ce type de couplage.
En gros, j'ai une tablette Android que je veux en toute sécurité de l'appariement avec un périphérique, écrit en C++, qui n'a pas intégré dans affichage/IO mécanisme. La tablette d'être jumelé sera le GUI/IO interface et je vais vous envoyer un message en arrière et quatrième fil Bluetooth. Je veux donc en toute sécurité une paire de la tablette avec chaque appareil par le biais de l'OOB éplucher régime.
Je comprends le concept de l'OOB, mais je vais avoir de la difficulté à trouver les bonnes méthodes à appeler lors de la recherche sur la android.developers.com site de mon client android code. Aussi lorsque l'on regarde les bluez des choses que je ne trouve pas beaucoup d'aller sur mon C++ écrit server.
La base de cas d'utilisation est à l'utilisateur de connecter la tablette à l'appareil via une connexion USB. La connexion USB facilitera le passage de touches/adresses mac de chaque appareil et de l'utilisation de cette information paire Bluetooth les uns avec les autres.
Je peux comprendre le USB de la partie mais une fois que j'ai les clés et les informations nécessaires sur le client et le serveur je n'arrive pas à traquer les bonnes méthodes pour appeler à chacune de ses extrémités, avec succès et en toute sécurité de la paire.
J'ai déjà un client/serveur de parler via une connexion insécurisée, c'est vraiment la seule partie que je vais avoir des ennuis avec, est le fait d'appariement sur les deux extrémités. Comme une fois que je suis jumelé je peux utilisé un secureRFComm de faire tout mon avenir de messagerie.
OriginalL'auteur Brian | 2011-08-02
Vous devez vous connecter pour publier un commentaire.
J'ai mon numéro 95% résolu, mais j'ai touché un petit bloc de route. D'abord je vais mettre à jour ce post avec une réponse concrète à la question d'origine et de poster ma question à la fin.
Pour résumer, ma tâche est d'utiliser de bande (oob) couplage de façon sécurisée paire une tablette android à l'aide de Honeycomb 3.2 à un beagle conseil d'administration par le biais de l'USB. Je ne peux pas poster de code spécifique, mais je vais vous donner toutes les étapes nécessaires pour obtenir ce fait.
Sur le beagle, conseil d'administration, j'ai le bluez de 4,96 pile installé avec le dbusoob plugin installé. Pour confirmer le tout est configuré correctement installer 2 dongles Bluetooth sur le beagle conseil d'administration et exécuter l'OOB Code de Test qui se trouve dans le bluez archive dans le dossier test. C'est un script python. Le script doit coupler les 2 dongles Bluetooth, si ce n'est bluez est probablement pas configuré correctement.
Pour obtenir de communication USB avec une tablette de travail, vous devez installer mtpfs et mtp-tools. Ceux-ci sont utilisés pour monter votre tablette. La façon que j'ai résolu d'obtenir de l'OOB de l'information entre les 2 appareils ont été de monter la tablette sur le beagle conseil d'administration. Une fois monté sur la tablette et de beagle board pouvez écrire un fichier avec les informations nécessaires.
Sur l'android côté OOB n'est pas pris en charge dans l'API publique donc, les choses se complique. Je crois que c'est parce que Honeycomb 3.2 n'ont pas de bluez pile qui prend en charge officiellement OOB l'attachement, mais Google a une sorte de mise en œuvre codée. Je crois cela parce que si vous regardez de pain d'épice code source pour l'Adaptateur Bluetooth et le Périphérique Bluetooth de classes, vous pouvez voir l'OOB méthodes disponibles mais ne sont pas exposés au travers de la documentation de l'API.
Ces méthodes sont encore public de sorte que vous pouvez les appeler par la réflexion. À l'aide de réflexion, vous pouvez également obtenir toutes les signatures de méthode dans une classe. Voilà comment j'ai compris ce que les méthodes que j'avais à ma disposition.
Méfiez-vous cependant que beaucoup ne sont pas documentées, et il n'est pas évident que certains le font. Ceux qu'il est important de noter sont les readOutOfBandData() dans la classe d'adaptateur et setDeviceOutOfandData() dans la classe de l'appareil.
Un autre gotcha vous pourriez rencontrer, c'est quand vous écrivez votre oob données dans un fichier sur la tablette pour être lu par le beagle conseil d'administration. Depuis android utilise mtp vous devez indexer votre fichier après il est écrit à l'intérieur de la carte sd de stockage. Pour résoudre cela, vous avez besoin de faire usage de la MediaScannerConnection classe et la scanFile() la méthode.
Espérons-le, ci-dessus permet de quelqu'un d'autre avec cette même question.
Maintenant à ma question. J'ai mon application android fonctionne très bien et mon beagle board code est le testOOB exemple de mise à jour pour avoir une fin lire LES informations à partir d'un fichier. Maintenant, le problème que je vois est que lors de l'exécution, tout le monde voit les uns des autres grands, mais sur la tablette, je reçois toujours un message me demandant si je veux de paire avec l'appareil xyz. Il n'y a pas de clés ou de numéros. Elle demande simplement de Paire avec l'Appareil XYZ" ou quelque chose le long de ces lignes.
Si j'appuie sur "paire" c'est toutes les paires des tablettes point de vue, MAIS le script python renvoie que le couplage a échoué. Le script python sur le beagle, le conseil est d'appeler la méthode pour faire la liaison entre les appareils. Même quand j'ai le android lancer le createBond appel je vois le même résultat. Je peux vous garantir que j'ai mis le nécessaire OOB données sur les deux extrémités avant d'essayer de paire dans les deux cas, donc ça ne semble pas être elle.
Donc mes questions qui, je l'espère, quelqu'un peut m'aider avec sont:
1) Pourquoi est-ce que je reçois un message sur android si l'OOB de l'échange de données correctement? Est-il un autre appel qui me manque, et à quelle fin?
2) Pourquoi le beagle board script python de retour à éplucher n'ont même pensé que j'appuie sur "paire" popup affiche sur la tablette. La tablette et le blues surveiller à la fois montrer vos appareils jumelés. Quelques fois, je suis penchée vers l'idée que je suis absent quelque chose.
Grâce à quelqu'un qui peut vous aider 🙂
EDIT:
Pour ajouter plus d'informations voici le logcat de sortie:
Les deux dernières ligne semble être le déclenchement de la popup sur Android pour la Paire/Annuler avec l'Appareil en question. Je voudrais Android à savoir juste auto bond et pose même pas la question. J'ai peut être rater un appel ou de faire quelque chose hors de l'ordre pour tout ce que je sais. La dernière chose que je fais dans mon code est de créer le lien qui semble être l'endroit évident à faire....
Merci pour toutes les suggestions!
oui pouvez-vous s'il vous plaît poster votre source
Bonjour, avez vous trouvé une solution à ce problème? Je pense que beaucoup de gens sont aux prises avec cette.
OriginalL'auteur Brian
Il n'y a aucune Api publiques encore sur androind pour permettre l'OOB de couplage.
Il est possible nnly si vous pouvez ou sont prêts à modifier le sous-jacent BlueZ pile à exposer l'OOB éplucher les crochets à l'application. (Non trivial)
Que des OOB mécanisme êtes-vous plannin sur l'utilisation ? NFC ?
Je recherche le android documentation un peu plus et trouvé quelques méthodes répertoriées comme @cacher qui semblent utiles. Une telle méthode est "createBondOutofBand". Est-ce quelque chose que je peux faire appel, par réflexion ou est-il un seuil de BlueZ pile changements nécessaires? Je suis aussi toujours des doutes sur la façon de gérer cela sur le serveur qui est le non-android. Par poignée, je veux dire les méthodes j'ai besoin de remettre en BlueZ, ce qui devrait laisser le serveur paire OOB. Merci pour toute aide!
OOB appariement nécessite un Hachage et Aléatoire de la valeur de chacun des Bluetooth HCIs (vous pouvez aussi le faire unidirectionnel d'authentification si un seul côté peut envoyer des données, mais ce n'est pas le cas ici). Je suppose que vous obtenez vos valeurs à partir de l'android de côté à l'aide de
readOutOfBandData
, mais je n'ai pas de développer pour android, donc impossible de vérifier quoi que ce soit.Merci pour la réponse. Je pense que j'ai une certaine direction sur le côté android, mais maintenant je m'interroge sur le c++/linux, en utilisant BlueZ. Je n'ai pas été en mesure de trouver des références BlueZ code c++ à l'aide de OOB éplucher. La référence que vous m'avez donné est de parler de java en particulier. Cette même conférence en direct en c++? Je n'ai pas été en mesure de trouver beaucoup de documentation pour linux/c++ oob éplucheur de sorte que toute les références que vous pouvez fournir serait grandement, surtout si il y a des exemples ou une liste de méthodes utiles j'ai besoin de l'appeler. Merci encore.
Pour BlueZ, vous devez utiliser le
dbusoob
plugin, utilisez leorg.bluez.OutOfBand
interface D-Bus, consultez ce code de test pour un exemple d'utilisation (en python)OriginalL'auteur Dennis Mathews