Android Bluetooth accept() / connect() avec déjà des appareils appariés

Je vais avoir du mal à se connecter à deux appareils Android via Bluetooth, ce qui se produit seulement quand ils ont été appariés avant. Je suis en cours d'exécution un que le serveur et l'autre que le client.

Voici la séquence de choses sur le côté serveur:

  1. Vérifier diverses Bluetooth statuts (adaptateur disponible, est activé, etc).
  2. appel listenUsingRfcommWithServiceRecord() avec un pré-définis UUID que j'ai choisi.
  3. demande de faire de périphérique détectable
  4. depuis découvrable se passe de manière asynchrone, j'appelle accept() et d'attente pour une connexion entrante.

Sur le côté client:

  1. Vérifier diverses Bluetooth statuts (adaptateur disponible, est activé, etc).
  2. pour chaque appareil dans getBondedDevices(), je compare getName() avec le nom du serveur. Si il y a un match, passez à l'étape 6.
  3. Départ BT découverte
  4. Pour chaque périphérique découvert (notez que les périphériques appairés à partir de 2a, n'apparaissent pas ici), comparer le nom de l'appareil avec le nom du serveur. Si il y a un match, passez à l'étape 6.
  5. Annuler la découverte
  6. Sur l'appareil qui a été trouvé à partir de l'étape 2, appel createRfcommSocketToServiceRecord() avec les mêmes pré-définis UUID qui a été utilisé sur le côté serveur.
  7. Appel connect() et d'attendre le retour d'un socket connecté.

Le processus ci-dessus fonctionne parfaitement bien pour moi lorsque le client et le serveur n'ont jamais été relié avant. Cependant, après Android enregistré dans la liste des périphériques, ils auront inévitablement un délai d'attente à la fonction connect()/accept() sur scène.

J'ai été la recherche d'une solution pour un couple de jours et j'ai essayé pas mal de choses, dont celui-ci:
Connexion à un déjà appareil compatible Bluetooth couplé

La réflexion méthode ne fonctionne pas pour moi non plus. Il semble que connect() renverrait immédiatement, mais quand j'ai essayé de getOutputStream() j'obtiens une exception. Sur le accept() de côté, il n'a pas même registre que quelqu'un a essayé de se connecter. J'ai sérieusement besoin d'un peu d'aide ou un pointeur sur l'obtention d'appareils pour établir une connexion, une fois qu'ils ont été jumelés avant.

Voici quelques informations sur les périphériques:

  • Je suis en train de tester le serveur et le client sur deux LG G2X téléphones.
  • À la fois de fonctionner sur Android 2.3.3, ce qui correspond à l'API de niveau 10.
  • Encore une fois, les travaux ci-dessus, après j'ai dissocier les périphériques manuellement dans les paramètres.

Je vous remercie à l'avance. Je suis sur le 2-semaine-vieux dans Android et Bluetooth, donc si vous voyez toutes les étapes manquantes ou les meilleures pratiques, merci de les signaler.

OriginalL'auteur o.c. | 2012-02-14