2012-06-03 2 views
1

Je veux développer une application qui utilise l'API Bluetooth Bluetooth Bluez par le moyen permettent à un appareil Android d'envoyer et de recevoir des données.Bluez application fonctionnant sur PC pour l'écoute d'un appareil Android

Pour le côté PC je l'ai regardé ce code: http://people.csail.mit.edu/albert/bluez-intro/x502.html parce que le protocole utiliser Android RFCOMM, ou je suppose que depuis est impossible de définir manuellement le protocole.

Puisque dans Android est seulement possible d'utiliser l'API Java (Bluez API verrouillé) et le SDP ne fonctionne pas très bien, je dois utiliser cet appel:

InsecureBluetooth.createRfcommSocket(BlueDevice , Channel , false); 

Quand je tournerai le canal par exemple 0xC (12) qui est l'un du canal renvoyé par la commande:

sdptool browse local | grep Channel 

l'application androïde peut se connecter correctement à l'ordinateur. Le problème est que je n'arrive pas à comprendre quels sont les paramètres permettant aux deux applications de communiquer. Pour le côté PC, j'ai seulement un numéro de port avec la valeur 1. Pour le côté Android, j'ai un canal qui est affecté à un service disponible par SDP. Mais SDP ne fonctionne pas dans Android alors comment je peux le faire?

Toute aide est appréciée. Merci

Répondre

0

Je sais que cela ne répond pas à votre question, je pense que bluecove (http://bluecove.org/) serait un meilleur choix pour cela. Il prend en charge la plupart des systèmes d'exploitation et fournit une bibliothèque décente pour Java.

Je ne pense pas que bluez fonctionnera pour Windows, vous avez besoin d'une pile WIDCOMM ou BlueSoleil, et bluecove utilisera la pile appropriée pour vous.

+0

Merci! Je le prends en compte. Mais je préfère utiliser la bibliothèque native C/C++ car elle est plus légère (mais aussi plus difficile à utiliser) et l'interface graphique de l'application est basée sur Qt Framework. – Bemipefe

1

Je résolus de cette façon:

Pour le côté PC utilisant l'enregistrement SDP. Nous devons enregistrer le service à un canal bien connu qui doit être gratuit, je veux dire pas utilisé par un autre service. Pour chek il faire la commande:

sdptool record local 

Le code pour le faire est à http://people.csail.mit.edu/albert/bluez-intro/x604.html

Section Exemple 4-9. La description d'un service

Cette deux lignes doit être ajoutée après // définir le service général ID

// set the service class ID 
sdp_list_t service_class = {NULL, &svc_uuid}; 
sdp_set_service_classes(record, &service_class); 

et nous devons changer le canal à un non utilisé par un autre service. Par exemple, le canal 1:

uint8_t rfcomm_channel = 1; 

Maintenant que nous avons quelque chose à écouter sur le côté PC, nous devons connecter avec l'appareil Android directement à celui du canal par le bien connaître la méthode de réflexion, car malheureusement, le SDP fonctionne maintenant à tous dans android.

Method bluetoothConnect; 

bluetoothConnect = BlueDevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}); 
CommunicationChannel = (BluetoothSocket) bluetoothConnect.invoke(BlueDevice, 1); 

CommunicationChannel.connect(); 

Bien entendu BlueDevice est un dispositif discored par le startDiscovery() Méthode et le "1" pour le canal 1 se tiennent.

Questions connexes