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 0x0001
RFCOMM 3 0x0003
L2CAP 256 0x0100
HTTP 12 0x000C
FTP 10 0x000A
TCP 4 0x0004
IP 9 0x0009
UDP 2 0x0002
BNEP 15 0x000F
OBEX 8 0x0008
TCS-BIN 5 0x0005
Festgelegte Werte für Profile:
PROFILE SERVICE NAME UUID(Dezimal.) UUID (Hexadezimal)
Serial Port SerialPort 4353 0x1101
Dial-up Networking LANAccessUsingPPP 4354 0x1102
Dial-up Networking DialupNetworking 4355 0x1103
Object Push OBEXObjectPush 4357 0x1105
Object Push OBEXFileTransfer 4358 0x1106
Cordless Telephony CordlessTelephony 4361 0x1109
Audio/Video Control A/V_RemoteControl 4366 0x110E
Intercom Intercom 4368 0x1110
Fax Fax 4369 0x1111
Generic Access Headset 4360 0x1108
Generic Access HeadsetAudioGateway 4370 0x1112
Handsfree Handsfree 4382 0x111E
Handsfree HandsfreeAudioGateway 4383 0x111F
Basic Printing BasicPrinting 4386 0x1122
Basic Printing PrintingStatus 4387 0x1123
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":
Wenn Du noch Fragen zum Thema Bluetooth Service Discovery hast, dann schreib einfach einen Kommentar - oder schau dir meine Buchtipps an: