Android Bluetooth ne Peut pas se connecter hors
Je développe une application qui utilise la technologie Bluetooth pour se connecter à un appareil et envoyer/recevoir des données. Je fais tous mes tests avec un Nexus One téléphone.
Je n'ai jamais été en mesure d'établir un SPP (serial port) de connexion de mon téléphone à n'importe quel appareil. Cependant, j'ai ont été en mesure de se connecter à partir d'un périphérique (mon portable) pour mon téléphone à l'aide d'un équivalent Mac de Mastic (La seule exception à cette règle est le "Transfert de Fichiers Bluetooth" application à partir de le Marché semble fonctionner, mais je ne pense pas que les utilisations RFCOM/SPP...).
Je continue à voir ce message dans mon LogCat journaux:
ERROR/BluetoothService.cpp(78): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
ainsi que ces:
java.io.IOException: Operation Canceled
java.io.IOException: Software caused connection abort
J'ai essayé d'utiliser l'UUID de "00001101-0000-1000-8000-00805F9B34FB" et j'ai aussi essayé d'utiliser le:
Method m = device.getClass().getMethod("createRfcommSocket", new Class[] { int.class });
sock = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
méthode au lieu de device.createRfcommSocketToServiceRecord(UUID);
ainsi--avec pas de chance.
Je suis en utilisant le BluetoothChat exemple et les variations de ce code pour faire tous mes tests...
Des Solutions ou des suggestions serait génial...ou même mieux/moins complexe exemple de certains tests de code que j'ai peut fonctionner sur le téléphone, ou un script python ou quelque chose je peux le faire tourner sur mon ordinateur pour vous aider à déboguer?
Merci! J'espère que ce n'est pas un bug avec le système d'exploitation Android, mais si elle l'est, j'espère trouver une solution de contournement.
EDIT: je tiens également à noter que la plupart des appareils apparaissent comme des "couplé, mais pas connecté" dans les paramètres Bluetooth.
EDIT 2: La solution semble être la simple désactivation de la fonction Bluetooth à l'écoute. Voir ma réponse post pour plus d'informations.
- D'autres sujets dignes liées à cette question: 1) stackoverflow.com/questions/2268365/... 2) stackoverflow.com/questions/2661932 3) groups.google.com/group/android-developers/browse_thread/thread/... 4) stackoverflow.com/questions/2660968/... 5) stackoverflow.com/questions/1953888/...
- avez-vous utiliser la réflexion, intentionnellement ou par hasard? La raison pour laquelle je demande est, je me demandais si vous avez utilisé comme un moyen de travailler autour d'un bug dans l'implémentation Bluetooth? Normalement, je pense que l'on pourrait juste
BluetoothSocket bs = createRfCommSocket(...
. Merci! - C'était intentionnel, parce que j'ai vu plusieurs personnes en ligne d'avoir des problèmes avec createRfcommSocketToServiceRecord qui n'ont été résolus par l'utilisation de cette inhabituelle solution de contournement. Voir: stackoverflow.com/questions/2660968/... --et-- stackoverflow.com/questions/2661932/...
Vous devez vous connecter pour publier un commentaire.
La solution, comme il s'avère, était de désactiver la fonctionnalité de serveur du service Bluetooth. En utilisant uniquement
createRfcommSocketToServiceRecord
et jamais appelerlistenUsingRfcommWithServiceRecord
(dans le BluetoothChat exemple, cela signifie ne jamais commencer le "AcceptThread") le problème a été résolu.Même si ces deux appels sont censé être totalement séparés et n'ont aucun effet sur l'autre (en fonction de l'Android docs), il vous suffit de commenter
listenUsingRfcommWithServiceRecord
fixe mon soi-disant problème distinct.Je peux prendre le Bluetooth programme de Chat inédits, et il ne sera pas en mesure d'établir une connexion sortante vers n'IMPORTE quel appareil bluetooth que j'ai testé (ordinateurs portables, ordinateurs de bureau, des casques, etc.), mais si je supprime que la seule chose qu'il fonctionne parfaitement en tant que client.
De toute façon, j'espère que cela aidera quelqu'un d'autre s'ils rencontrent le même problème. Ce doit être un bug avec le système d'exploitation Android, ou éventuellement le firmware sur le Nexus One.
Je ne serais pas le stopDiscovery erreur ses bonnes que vous avez l'annulation de découverte avant de faire de votre connexion. Par le SDK docs:
Donc, avec cela dit, avez-vous été en mesure d'obtenir le Bluetooth Chat exemple fonctionne avant de vous y avez apporté des modifications au code?
L'UUID que vous voulez pour les SPP/RFCOMM est:
ou définis d'une autre façon (à la fois réaliser la même chose).