Bluetooth Service Discovery
Nachdem die Geräte in der Umgebung erkannt wurden, müssen die einzelnen Geräte nach den von ihnen angebotenen Services durchsucht werden. Die Funktionalität der Service Discovery wird in der Bluetooth-API durch die Klassen DiscoveryAgent, DiscoveryListener, ServiceRecord, DataElement und UUID abgebildet.
Die Services eines Geräts werden in der Service Discovery Database (SDDB) geführt, welche aus einer Collection von ServiceRecord-Objekten besteht.
Die Klasse UUID (Universal Unique Identifier) identifiziert Bluetooth Protokolle wie SDP, L2CAP, FTP, OBEX etc. und Bluetooth-Profile wie z. B. GAP und SPP eindeutig. Mittels der UUID wird ein Gerät mit der Unterstützung für ein bestimmtes Protokoll oder Profil gesucht.
Hier einige festgelegte Werte für die Protokolle:
PROTOCOL UUID (DEZIMAL) UUID (HEXADEZIMAL)
SDP 1 0×0001
RFCOMM 3 0×0003
L2CAP 256 0×0100
HTTP 12 0x000C
FTP 10 0x000A
TCP 4 0×0004
IP 9 0×0009
UDP 2 0×0002
BNEP 15 0x000F
OBEX 8 0×0008
TCS-BIN 5 0×0005
Festgelegte Werte für Profile:
PROFILE SERVICE NAME UUID(Dezimal.) UUID (Hexadezimal)
Serial Port SerialPort 4353 0×1101
Dial-up Networking LANAccessUsingPPP 4354 0×1102
Dial-up Networking DialupNetworking 4355 0×1103
Object Push OBEXObjectPush 4357 0×1105
Object Push OBEXFileTransfer 4358 0×1106
Cordless Telephony CordlessTelephony 4361 0×1109
Audio/Video Control A/V_RemoteControl 4366 0x110E
Intercom Intercom 4368 0×1110
Fax Fax 4369 0×1111
Generic Access Headset 4360 0×1108
Generic Access HeadsetAudioGateway 4370 0×1112
Handsfree Handsfree 4382 0x111E
Handsfree HandsfreeAudioGateway 4383 0x111F
Basic Printing BasicPrinting 4386 0×1122
Basic Printing PrintingStatus 4387 0×1123
Die Klasse DiscoveryAgent, welche auch für die Device Discovery benutzt wird, ist sowohl für die Suche nach Services, als auch für die Suche nach Geräten zuständig. Um Services auf RemoteDevices zu finden, werden die Methoden selectService() und searchServices() benutzt.
Die Methode searchServices() erwartet als Übergabeparameter ein int[] attrSet, mit den gewünschten Attributen, ein UUID[] uuidSet, welches die UUIDs enthält, nach welchen gesucht wird sowie die zu durchsuchende RemoteDevice und den DiscoveryListener. Wenn ein passender Service auf dem Gerät gefunden wird, werden die entsprechenden Methoden ( serviceSearchCompleted(), servicesDiscovered() )der DiscoveryListener – Klasse aufgerufen.
Um einen bestimmten Service auf irgendeinem Gerät in der Umgebung zu finden, wird die Methode selectService() verwendet. Über eine UUID als Übergabeparameter kann wird der Service eindeutig identifiziert, es ist mit dieser Methode im Gegensatz zu searchServices() nicht möglich, nach mehreren UUIDs zu suchen.
Bei der DiscoveryListener-Klasse wird diesmal die Callback-Methode servicesDiscovered() aufgerufen, wenn ein Service gefunden wurde. Als Übergabeparameter bekommt sie eine Transaction-ID sowie ein Array von ServiceRecord-Objekten. Von einem ServiceRecord-Objekt kann unter anderem eine connectionURL ( getConnectionURL() )abgerufen werden, welche benötigt wird um eine Verbindung zum Kommunikationspartner aufzubauen.
Alle Attribute in einem ServiceRecord-Objekt werden als javax.bluetooth.DataElement – Objekt abgelegt.
Ähnliche Artikel zu "Bluetooth Service Discovery":
- Bluetooth-Profile
- SDP – Service Discovery Protocol
- J2ME, Java Bluetooth API [ JSR 82 ]
- btspp
- Bluetooth – Suche nach Geräten und Services
Wenn Du noch Fragen zum Thema Bluetooth Service Discovery hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an:

