Назва цієї технології в перекладі на російську мову означає «Синьозубий». Це було прізвисько короля Харальда Датського. У статті на сайті розробників компанії Sun (http://developers.sun.com/mobility/midp/articfes/bluetoothl/) докладно розповідається про цю технологію і є в тому числі анекдотичний зауваження про те, що на рунічному камені, спорудженому на честь Харальда, були викарбувані такі слова:
Харальд хрестив данів.
Харальд підкорив Данію і Норвегію.
Харальд вважає, що комунікація між мобільними телефонами і ноутбуками повинна йти як по маслу.
Щоб продемонструвати, як в Android використовуються класи, що забезпечують зв'язок за технологією Bluetooth, ми напишемо утиліту для установки з'єднання і передачі даних між пристроями, що підтримують Bluetooth. Цей код заснований на прикладі BluetoothChat з комплекту Android SDK. Даний код був зроблений більш універсальним, щоб охопити більш широкий спектр додатків з Bluetooth, а також спрощений, щоб вам було зручніше адаптувати його для своїх цілей.
Досліджуючи різні API Android для роботи з Bluetooth, ми розглянемо, як ці АРІ задіюються в розглянутому коді і як їх можна використовувати для цілей, пов'язаних з конкретним додатком, в тому числі в діагностичному інструменті, що застосовується в ході розробки для Bluetooth.
Спочатку розглянемо, як працює Bluetooth і як ця технологія реалізована в Android.
Стек протоколів Bluetooth
Цей розділ присвячений стандартам і протоколам, з яких складається стек протоколів Bluetooth (рис. 17.1). Ці протоколи і стандарти вичерпно характеризують Bluetooth: ті види даних, для передачі яких призначений Bluetooth, кількість пристроїв, між якими можна одночасно встановити зв'язок, час затримки при передачі і т. Д.
Мал. 17.1. Стек протоколів Bluetooth в Android
Bluetooth з'явився як особливий рід мережевих взаємодій, оскільки він являє собою персональну, або особисту, мережа. Такі мережі також називаються абревіатурою PAN, або пікомережі. Bluetooth призначений для з'єднання до восьми пристроїв і для передачі даних з максимальною швидкістю до 3 Мбіт / с. Сполучені пристрої повинні розташовуватися близько один до одного: в межах 10 м. Bluetooth споживає дуже малу кількість енергії, що обчислюється мілівата. Це означає, що навіть найменшої батареї надовго вистачає для такого зв'язку. Навушники Bluetooth з малесенькою, невагомою батареєю можуть годинами забезпечувати голосовий зв'язок - приблизно стільки ж витримує набагато більша батарея мобільного телефону, оскільки мобільний радіосигнал з телефону повинен досягати значно більш віддаленій антени.
До приладів, з якими корисно використовувати Bluetooth, відносяться пристрої з низькою і середньою швидкістю передачі даних - зокрема, клавіатури, миші, планшети, принтери, мікрофони, навушники (в тому числі з мікрофонами), а також мобільні та персональні комп'ютерні пристрої, якщо з їх периферійними компонентами може знадобитися зв'язок. Bluetooth також дозволяє встановлювати з'єднання між ПК і мобільними телефонами.
Протоколи, специфічні для Bluetooth, і запозичені протоколи
Говорячи про стекупротоколів Bluetooth, важливо розділяти ці протоколи на специфічні для Bluetooth і запозичені, тобто такі, які працюють «поверх» Bluetooth. Разом всі ці протоколи - як відносяться безпосередньо до Bluetooth, так і запозичені - можуть бути дуже складні. Але якщо на хвилину абстрагуватися від того, що над Bluetooth знаходяться такі складні протоколи, як OBEX і TCP / IP, то все стає набагато зрозуміліше. Тому ми почнемо з більш низьких рівнів Bluetooth і покажемо, як ці рівні допомагають «оформити» нашу роботу з Bluetooth.
Ще одна важлива абстракція при роботі з Bluetooth зводиться до того, що ця технологія заміняє порти послідовного введення-виведення. Це означає, що нижні рівні Bluetooth емулюють віртуальний набір послідовних кабелів між сполучаються пристроями і дозволяють вам управляти цими кабелями. Саме з таким протоколом Bluetooth ми і будемо працювати. Таким чином, ми зможемо користуватися для зчитування і запису даних простими класами введення-виведення Java. іо: InputStream і OutputStream.
Bluez: реалізація Bluetooth для Linux
Мобільний пристрій може з'єднуватися з Bluetooth з якими завгодно іншими пристроями - чого не скажеш про периферійні пристрої, які можуть підключатися тільки до комп'ютера або мобільного пристрою. Це означає, що на мобільному пристрої нам буде потрібно практично повна реалізація Bluetooth і всіх запозичених протоколів, а також призначений для користувача інтерфейс, що забезпечує необхідні взаємодії для встановлення і використання з'єднань, а також для роботи в додатках, що зв'язуються з Bluetooth.
В Android використовується стек Bluez Bluetooth - найбільш поширений стек для роботи з Bluetooth, застосовуваний в Linux. Він прийшов на зміну проекту, що називалася Open ОТ. Інформація про Bluez міститься на сайті проекту Bluez - http://www.bluez.org.
Bluez, розроблений в Qualcomm, увійшов до складу ядра Linux. Проект почався в 2001 році і досі активний, добре підтримується. Крім того, Bluez - це стабільна реалізація, що володіє хорошою сумісністю, - ще одна причина, по якій варто використовувати Linux в операційних системах для мобільних пристроїв.
Використання Bluetooth в додатках Android
Під використанням Bluetooth в Android розуміється застосування класів, спеціально розроблених для того, щоб инкапсулировать принцип, за яким Bluetooth працює в операційній системі Android. Стек Bluez надає методи для перерахування пристроїв, слухання з'єднань і використання з'єднань. У пакеті Java. іо надаються класи для зчитування і запису даних; а класи Handler і Message забезпечують можливості побудови зв'язків (мостів) між призначеним для користувача інтерфейсом, з одного боку, і потоками, які керують введенням і виведенням в Bluetooth, - з іншого. Розглянемо код і приклади використання цих класів.
Компіляція і запуск коду допомагають зрозуміти, що можуть робити класи Bluetooth в додатках Android, призначених для встановлення зв'язку між пристроями, які розташовані поблизу один від одного.
Почнемо випробування програми, що використовує Bluetooth, з самого простого: спробуємо з'єднати мобільний телефон з персональним комп'ютером. Потім нам знадобиться програма, яка спостерігала б за тією інформацією, яку отримує ПК по Bluetooth, і стежила, яка саме послана вами інформація дійшла до ПК. В даному випадку застосовується утиліта Linux, звана hcidump.
Запустіть програму в режимі налагодження і встановіть точки зупину в частинах додатка, які займаються відкриттям і прийняттям з'єднання. Можна створити з'єднання зі свого ПК (в Linux для цього використовується аплет Blueman) або ж з програми. Після створення з'єднання запустіть на терміналі програму hcidump і переконайтеся, що інформація, яку ви ввели, потрапила на ПК. Користуйтеся перерахованими нижче прапорами, щоб відображати лише вміст, яке надходить по Bluetooth:
sudo hcidump -a -R
Тепер інформація, яку ви послали з пристрою, повинна відобразитися в якості висновку hcidump на вашому ПК.
Bluetooth і пов'язані з ним класи введення / виведення
Ця програма при роботі спирається на клас BluetoothAdapter, що забезпечує управління адаптером Bluetooth на пристрої, клас BluetoothDevice, який представляє стан підключеного пристрою, і клас BluetoothSocket, що надає сокети для слухання і встановлення з'єднань:
У класі BtHelperHandler визначається ряд констант, а також надається трохи обгорткового коду (wrapper code), який дозволяє зробити чистішим методи, пов'язані з передачею повідомлень.
Клас BtSPPHel per Java инкапсулирует роботу з протоколом Bluetooth SPP (протокол послідовного порту):
Клас BtSPPHel per об'єднує використання всіх цих класів, а також містить визначення вкладених підкласів потоку Thread, які займаються слуханням, встановленням з'єднань і їх обслуговуванням.
Саме тут пакет Java. io стикується з Android Bluetooth: об'єкти BI uetoothSocket містять методи, які повертають посилання на об'єкти InputStream і OutputStream, які, в свою чергу, будуть використовуватися для зчитування і запису даних при встановленому сокет-з'єднанні:
клас DeviceListActivity
Ця активність відображає діалогове вікно, в якому перераховуються відомі пристрої і користувач може активувати пошук (сканування) пристроїв. На відміну від частин програми, в яких підкласи Thread застосовуються для реалізації асинхронного введення / виводу, а підкласи Handler - для передачі результатів потоку призначеного для користувача інтерфейсу, метод startDiscovery класу BluetoothAdapter запускає окремий потік і повідомляє результати за допомогою широкомовних намірів. Тут для обробки результатів використовується приймач широкомовних намірів BroadcastReceiver.
клас BtConsoleActivity
Клас BtConsol eActivity створює активність для обміну миттєвими повідомленнями (на кшталт чату) для взаємодії з пристроєм Bluetooth. Меню цієї активності дозволяють підключатися до пристрою, а основний вид в складі даної активності - це прокручуваний список тих даних, які відправляються і приймаються. У нижній частині екрана розташоване текстове поле Edi tText. Сюди вводиться текст, який потім відправляється на інший кінець SPP-з'єднання.
Класи оброблювачів використовуються для «склеювання» однопотокового призначеного для користувача інтерфейсу з потоками, що займаються слуханням, з'єднанням і здійсненням операцій введення / виводу по сокетних з'єднанням.
Джерело: Android. Програмування на Java для нового покоління мобільних пристроїв