Главная » Разработка для Android » BLUETOOTH в Android приложении

0

 

Название этой технологии в переводе на русский язык означает «Синезубый». Это было прозвище короля Харальда Датского. В статье на сайте разработчиков компании 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 для нового поколения мобильных устройств

По теме:

  • Комментарии