Question

Je suis en train d'utiliser l'application API exemple Chat Bluetooth que Google fournit pour se connecter à un adaptateur RS232 Bluetooth branché à un autre appareil. Voici l'application de référence:

http://developer.android.com/resources/samples/BluetoothChat/ index.html

Et voici la fiche technique du connecteur RS232 juste pour la référence:

http://serialio.com/download/Docs/BlueSnap-guide -4.77_Commands.pdf

Eh bien, le problème est que quand je vais à se connecter à l'appareil avec:

mmSocket.connect(); (BluetoothSocket::connect())

Je reçois toujours une erreur de IOException lancée par la méthode connect(). Quand je fais une toString à l'exception que je reçois « découverte de service a échoué ». Ma question est la plupart du temps ce sont les cas qui causeraient un IOException pour se jeter dans la méthode de connexion? Je sais que ce sont dans la source quelque part, mais je ne sais pas exactement comment la couche java que vous écrivez des applications et la couche C / C ++ qui contient l'interface réelle des piles. Je sais qu'il utilise la pile Bluetooth BlueZ qui est écrit en C / C ++, mais ne savez pas comment qui lie dans la couche java qui est ce que je pense est de jeter l'exception. Toute aide me montrant où je peux essayer de décortiquer cette question serait incroyable.

Aussi juste de noter que je suis en mesure de paire avec l'adaptateur RS232 très bien, mais je ne suis jamais en mesure de se connecter réellement. Voici la sortie logcat pour plus référence:

I/ActivityManager( 1018): Displayed activity com.example.android.BluetoothChat/.DeviceListActivity: 326 ms (total 326 ms)
E/BluetoothService.cpp( 1018): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
D/BluetoothChat( 1729): onActivityResult -1
D/BluetoothChatService( 1729): connect to: 00:06:66:03:0C:51
D/BluetoothChatService( 1729): setState() STATE_LISTEN -> STATE_CONNECTING
E/BluetoothChat( 1729): + ON RESUME +
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_CONNECTING
I/BluetoothChatService( 1729): BEGIN mConnectThread
E/BluetoothService.cpp( 1018): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
E/BluetoothEventLoop.cpp( 1018): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/1498/hci0/dev_00_06_66_03_0C_51
I/BluetoothChatService( 1729): CONNECTION FAIL TOSTRING: java.io.IOException: Service discovery failed
D/BluetoothChatService( 1729): setState() STATE_CONNECTING -> STATE_LISTEN
D/BluetoothChatService( 1729): start
D/BluetoothChatService( 1729): setState() STATE_LISTEN -> STATE_LISTEN
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
V/BluetoothEventRedirector( 1080): Received android.bleutooth.device.action.UUID
I/NotificationService( 1018): enqueueToast pkg=com.example.android.BluetoothChat callback=android.app.ITransientNotification$Stub$Proxy@446327c8 duration=0
I/BluetoothChat( 1729): MESSAGE_STATE_CHANGE: STATE_LISTEN
E/BluetoothEventLoop.cpp( 1018): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/1498/hci0/dev_00_06_66_03_0C_51
V/BluetoothEventRedirector( 1080): Received android.bleutooth.device.action.UUID

Le dispositif que je suis en train de se connecter à l'est 00:06:66:03:0C:51 que je peux rechercher et apparemment paire avec très bien.


Le ci-dessous est fusionnée à partir d'une question similaire qui a été résolu avec succès par la réponse choisie ici:

Comment peut-on se connecter à un dispositif rfcomm autre qu'un téléphone Android?

L'API Android fournit des exemples d'utilisation listenUsingRfcommWithServiceRecord () pour mettre en place une douille et createRfcommSocketToServiceRecord () pour se connecter à cette prise.

Je suis en train de se connecter à un appareil embarqué avec un BlueSMiRF Or puce. Mon code Python de travail (en utilisant la bibliothèque pybluez ), que je voudrais port Android , se présente comme suit:

sock = bluetooth.BluetoothSocket(proto=bluetooth.RFCOMM)
sock.connect((device_addr, 1))
return sock.makefile()

... donc le service pour se connecter à est simplement définie comme le canal 1, sans aucune recherche de SDP.

Comme le seul mécanisme documenté que je vois dans l'API Android ne recherche SDP d'un UUID, je suis un peu à perte. L'utilisation de « parcourir sdptool » de mon hôte Linux arrive vide, donc je conjecturer que la puce en question n'a tout simplement pas le soutien SDP.

Était-ce utile?

La solution

Ok la réponse courte est que je devais utiliser cette UUID afin de se connecter à mon appareil PSP:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

J'ai essayé de le changer car je pensais que seul le « 1101 » était une partie importante puisque je vois que mentionné avec des choses PSP dans tous les sens sur les intertubes mais fait-il pas reconnectez. Apparemment, ce UUID spécifique est ce qui est censé être utilisé pour se connecter à des périphériques génériques du PSP. Quoi qu'il en soit juste pensé que je posterai ici si tous ceux qui ce genre de problème a une réponse. Ça m'a pris environ 3 jours pour trouver LOL!

Autres conseils

Je suppose qu'elle est liée à un sony-ericsson bug ( voir ici ).

Je suis capable de se connecter à partir de / vers un périphérique Android 2.0 et mon mac en utilisant Bluetooth et un UUID totalement maquillé. Essayer de faire la même chose avec un dispositif de J2ME (une w910i sony ericsson) travaillait uniquement si l'androïde était le serveur, sinon j'obtenir la même exception que vous.

Le UUID que vous utilisez, pour autant que je sache, est une « adresse de base » pour le profil spp, et dans le domaine de ServiceClassIDList du ServiceRecord retourné par le dispositif serveur lors de l'émission d'une découverte de service, il doit être indiqué après l'UUID vous avez décidé de use..apparentely ce n'est pas le cas dans certaines situations (par exemple, mon premier téléphone énuméré le UUID générique et mon UUID personnalisé).

On dirait que c'est la même situation ici. Vous pouvez essayer de modifier manuellement le ServiceRecord et retourner le bon ServiceClassIDList. Peut-être que cela fonctionnera pour you..unfortunately, mon téléphone portable stupide refuse de le changer: (

PS. une chose étrange est que mon mac est en effet capable de voir le service, même si le ServiceRecord est « cassé », je suppose que android juste pris la peine de voir la première UUID dans le ServiceClassIDList, alors que mon pc passer par la liste de recherche tous les éléments. Mais cela est juste ma supposition:)

La vitesse de transmission que vous définissez doit correspondre au dispositif auquel il est accroché à. Ils ont le défaut 115200 ou passer à 9600, mais si vous avez besoin d'autres (1200 dans mon cas pour un instrument d'enquête), vous devez mettre en place que par HyperTerminal * et un câble null modem.

* Bien que la documentation de l'appareil bluesnap suggèrent d'utiliser hyperterminal il y a des problèmes avec elle. Après quelques appels à bluesnap, ils ont suggéré:

Tout d'abord, lors de la connexion du périphérique à un PC, essayez de mettre les réglages des cavaliers à leurs positions d'origine en utilisant 115200 8, N, 1 et X off. Lorsque DTE activé, ne peut pas établir une connexion terminal sans l'aide d'un logiciel spécial spécialement conçu pour les connexions DTR / DTE.

Deuxièmement, HyperTerminal a des problèmes connus avec le BlueSnap. Je recommande d'essayer TeraTerm ou PuTTY.

m'a fallu 4 jours pour le découvrir!

Qu'est-ce que la vitesse de transmission vous avez votre appareil Bluetooth fixé à? Je suis connecté, mais mes données montre comme la bouillie de maïs brouillées typique que vous obtenez avec des vitesses de transmission mixtes. J'ai mis le mien à 57600, ce que j'ai vu d'autres gens utilisent. Oh, merci pour l'affichage des résultats de l'UUID me avaient travaillé pendant quelques jours ainsi.

Si 'browse sdptool' rapporte aucune information sur l'essai de l'appareil 'enregistrements sdptool [appareil-mac-ici]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top