Коли ви виявили віддалене Bluetooth пристрій, бажано знати, які сервіси (послуги) воно може забезпечити. Для отримання такої інформації слід скористатися методом searchServices () класу DiscoveryAgent, який виконує пошук сервісів на уда ленном пристрої, представленому об’єктом RemoteDevice. Якщо який або сервіс обна Ружену, то віртуальна Java машина викликає метод servicesDiscovered () (За умови, що

в об’єкті був реалізований інтерфейс DiscoveryListener). Цей метод передає об’єкт Service Record, що належить виявленому сервісу. Отримавши цей об’єкт, ви зможете працювати з віддаленим пристроєм, але для цього необхідно спочатку встановити зв’язок з пристроєм, який передав об’єкт ServiceRecord.

Для установки зв’язку з віддаленим пристроєм викличте метод getConnectionURL об’єктів та ServiceRecord. Наприклад, якщо отримано один з об’єктів списку сервісів servRecord [i], то наступний оператор встановлює зв’язок з віддаленим пристроєм:

String connectionURL = servRecord[i].getConnectionURL(0,  false);

Реєстрація сервісу

Перед тим як виконувати пошук сервісів віддалених Bluetooth пристроїв, сервер Blue tooth повинен зареєструвати сервіси у внутрішній базі даних під назвою SDDB (Service Discovery DataBase). Цей процес називається реєстрацією сервісу. Тут хочу на пам’ятати, що в додатках типу «точка точка», наприклад, ftp, telnet та ін, будь-який пристрій може бути або клієнтом, або сервером. В цьому випадку для покращення функціональності програми бажано включити в нього програмний код, відробляє як клієнтський (наприклад, пошук пристроїв), так і серверний (реєстрація сервісу).

Нижче показаний можливий алгоритм реєстрації сервісу та збереження даних у базі даних SDDB:

викличте метод Connector.open () і передайте результат інтерфейсу StreamConnec tionNotifier (тут метод Connector.open () створює новий об’єкт ServiceRecord і уста встановлюються для нього деякі атрибути);

використовуйте об’єкти LocalDevice і StreamConnectionNotifier для отримання об’єкта

ServiceRecord, створеного системою;

якщо необхідно, модифікуйте або додайте свої атрибути в об’єкт ServiceRecord;

використовуйте StreamConnectionNotifier і виклик acceptAndOpen (), після чого чекайте, поки сервіси не будуть виявлені клієнтськими Bluetooth пристроями і не буде виконана установка з’єднання;

якщо сервер повинен відключитися, викличте метод close () об’єкта StreamConnec

tionNotifier.

Класи StreamConnectionNotifier і Connector включені в пакет javax.microedition.io плат

форми J2ME platform. Нижче показаний програмний код, який реалізує описаний алгоритм:

// èíèöèàëèçàöèÿ  ïåðåìåííûõ

StreamConnectionNotifier  notifier = null; StreamConnection   sconn  = null;

LocalDevice  localdevice  = null;

ServiceRecord   servicerecord  = null;

// øàã  1

// ñòðîêà  òèïà   String ñ URL  äîëæíà áûòü èíèöèàëèçèðîâàíà notifier =  (StreamConnectionNotifier)Connector.open(url);

ПРОГРАМУВАННЯ BLUETOOTH

// øàã  2

// ïîëó÷èì îáúåêò   LocalDevice,  åñëè  ýòî  åùå  íå ñäåëàíî

localdevice  = LocalDevice.getLocalDevice();

servicerecord  = localdevice.getRecord(notifier);

// øàã  3  (íåîáÿçàòåëüíûé)

// øàã  4

// íà ýòîì øàãå  áëîêèðóåòñÿ   êëèåíòñêèé  ïîòîê, ïîêà íå áóäåò

// ïîëó÷åí îòâåò  îò  êëèåíòà. Ïîñëå òîãî  êàê  îòâåò  ïîëó÷åí,

// çàïèñü   î ñåðâèñå  áóäåò  çàïèñàíà â  SDDB

notifier.acceptAndOpen();

// øàã  5

// âûïîëíÿåòñÿ  îæèäàíèå

// ïðåäïîëîæèì, ÷òî  êëèåíò óñïåøíî  ñîåäèíèëñÿ, òîãäà   ìîæíî âûõîäèòü

// øàã  6

// çäåñü  çàïèñü   ñåðâèñà  ìîæåò  áûòü óäàëåíà èç  SDDB

notifier.close();

Це все, що необхідно для реєстрації сервісу Bluetooth. Далі слід встановити з’єднання з віддаленим пристроєм.

Джерело: Магда Ю. С. Комп’ютер в домашній лабораторії. – М.: ДМК Пресс, 2008. – 200 с.: Іл.