2010-11-28 29 views
1

Je peux obtenir une connexion de travail à partir d'un périphérique Bluetooth si mon application attend un appel 'accept' avant la réception ACTION_ACL_CONNECTED. Si j'émets l'appel 'accept' en réponse à la diffusion reçue, je ne peux pas établir la connexion socket.Créer une connexion socket avec un périphérique Bluetooth après ACTION_ACL_CONNECTED

Existe-t-il un moyen d'y parvenir afin que je puisse configurer la connexion socket en réponse à l'événement Bluetooth?

+0

Vous pouvez démarrer un serveur après une émission: http: //stackoverflow.com/a/15662892/2046601 –

Répondre

0

Je ne pense pas qu'il existe un moyen d'accepter en réponse à un ACTION_ACL_CONNECTED, cela est conçu pour fonctionner de manière similaire aux sockets TCP classiques, l'écoute ne se fait qu'enregistrant le service UUID dans l'enregistrement SDP et en attendant pour les connexions entrantes) lorsque l'appel accept() est fait.

Vous pouvez accepter (délai d'attente) si vous êtes préoccupé par le blocage de l'accepter appel et ne peut pas se permettre d'avoir un thread dédié à bloquer le accept()

+0

Si je compile l'application pour qu'elle accepte une connexion SPP à chaque fois que ce profil bien connu est utilisé par un périphérique client, mon application acceptera et commencera le traitement. Mais que se passe-t-il si le profil SPP se connecte depuis le périphérique client pour une application différente? J'espérais que je pourrais regarder la diffusion ACL connect de bas niveau pour déterminer si l'appareil qui vient de passer en ondes est un appareil auquel mon application peut parler, sinon j'ignorerais la diffusion connectée. –

+0

Le comportement que j'espérais est que si une application essayait un 'accepter', la pile bluetooth regarderait d'abord si un périphérique a une connexion bas niveau active et pourrait essayer de se connecter au socket. Si la pile ne trouve pas l'une de ces connexions «non répondues», elle se bloque normalement. –

+0

Votre application s'enregistrera et s'identifiera via l'UUID (qui sera unique pour différentes applications) lorsqu'un périphérique distant découvre, trouve votre application/service via cet UUID, puis se connecte à cet UUID, donc quand vous attendez l'acceptation () pour une connexion, vous attendez des connexions à cet UUID. Ainsi, même si plusieurs applications utilisent SPP, la commande accept() sera dirigée en fonction de l'UUID. En outre, vous pouvez toujours vous déconnecter des appareils avec lesquels vous ne voulez pas vous connecter. (Si vous avez les moyens de connaître les périphériques avec lesquels vous ne voulez pas vous connecter) –