Платформа Android поддерживает сетевой стек Bluetooth, который позволяет устройству обмениваться данными с другими устройствами Bluetooth по беспроводной сети. Фреймворк приложения предоставляет доступ к функциям Bluetooth через API Bluetooth. Эти API позволяют приложениям подключаться к другим устройствам Bluetooth, обеспечивая беспроводную связь между двумя или несколькими устройствами.
С помощью Bluetooth API приложение может:
- Выполните поиск других устройств Bluetooth.
- Запрашивать у локального адаптера Bluetooth информацию о подключенных устройствах Bluetooth.
- Устанавливать каналы RFCOMM.
- Подключаться к другим устройствам с помощью обнаружения сервисов.
- Передавать данные на другие устройства и получать их.
- Управление несколькими подключениями.
В этой статье рассматривается классический Bluetooth. Классический Bluetooth – правильный выбор для более энергоемких операций, которые включают потоковую передачу и связь между устройствами. Для устройств Bluetooth с низким энергопотреблением рекомендуется использовать Bluetooth с низким энергопотреблением.
В этой документации описываются различные профили Bluetooth и объясняется, как использовать API Bluetooth для выполнения четырех основных задач, необходимых для связи по Bluetooth:
- Настройка Bluetooth.
- Поиск устройств, которые подключены или доступны поблизости.
- Подключение устройств…
- Перенос данных между устройствами.
Пример использования Bluetooth API можно найти в приложении Bluetooth Chat.
Основные сведения
Чтобы устройства с поддержкой Bluetooth могли передавать данные друг другу, они должны сначала сформировать канал связи с помощью процесса сопряжения. Одно устройство, видимое, делает себя доступным для входящих запросов на подключение. Другое устройство находит видимое устройство с помощью процесса обнаружения сервисов. После того как видимое устройство примет запрос на подключение, оба устройства завершат процесс связывания, в ходе которого они обменяются ключами безопасности. Устройства кешируют эти ключи для последующего использования. После завершения процессов сопряжения и связывания два устройства обмениваются информацией. Когда сеанс завершается, устройство, инициировавшее запрос на подключение, освобождает канал, который связывал его с видимым устройством. Однако устройства остаются связанными, поэтому они могут автоматически повторно подключиться во время следующего сеанса, если они находятся в пределах досягаемости друг друга и ни одно из устройств не удалило связь.
Чтобы использовать Bluetooth API, необходимо объявить несколько разрешений в файле манифеста. После того как приложение получит разрешение на использование Bluetooth, ему потребуется доступ к BluetoothAdapter, чтобы определить, доступен ли Bluetooth на устройстве.
Если Bluetooth доступен, выполните следующие действия:
- Находить устройства Bluetooth поблизости, как уже подключенные, так и новые.
- Подключите устройство Bluetooth.
- Перенесите данные с подключенного устройства.
Некоторые устройства используют определенный профиль Bluetooth, который объявляет, какие данные он предоставляет.
Основные классы и интерфейсы
Все API Bluetooth доступны в пакете android.bluetooth.
Для создания подключений Bluetooth вам понадобятся следующие классы и интерфейсы:
BluetoothAdapter- Представляет локальный адаптер Bluetooth (радиомодуль Bluetooth).
BluetoothAdapter– это точка входа для всех взаимодействий по Bluetooth. С его помощью можно находить другие устройства Bluetooth, запрашивать список связанных устройств, создавать экземплярBluetoothDevice, используя известный MAC-адрес, и создаватьBluetoothServerSocketдля прослушивания сообщений от других устройств. BluetoothDevice- Представляет удаленное устройство Bluetooth. Используйте его, чтобы запросить подключение к удаленному устройству через
BluetoothSocketили получить информацию об устройстве, например его название, адрес, класс и состояние подключения. BluetoothSocket- Представляет интерфейс для сокета Bluetooth (аналогично
Socket). Это точка подключения, которая позволяет приложению обмениваться данными с другим устройством Bluetooth с помощьюInputStreamиOutputStream. BluetoothServerSocket- Представляет открытый серверный сокет, который ожидает входящие запросы (аналогично TCP
ServerSocket). Чтобы подключить два устройства, одно из них должно открыть серверный сокет с этим классом. Когда удаленное устройство Bluetooth отправляет запрос на подключение к этому устройству, оно принимает запрос и возвращает подключенный объектBluetoothSocket. BluetoothClass- Описывает общие характеристики и возможности устройства Bluetooth. Это набор свойств, доступных только для чтения, который определяет классы и сервисы устройства. Хотя эта информация дает полезную подсказку относительно типа устройства, атрибуты этого класса не обязательно описывают все профили и службы Bluetooth, которые поддерживает устройство.
BluetoothProfile- Интерфейс, представляющий профиль Bluetooth. Профиль Bluetooth – это спецификация беспроводного интерфейса для связи между устройствами по Bluetooth. Пример: профиль Hands-Free. Подробнее о профилях Bluetooth…
BluetoothHeadset- Обеспечивает поддержку Bluetooth-гарнитур для мобильных телефонов. Это относится как к профилю Bluetooth-гарнитуры, так и к профилю Hands-Free (v1.5).
BluetoothA2dp- Определяет, как высококачественный звук может передаваться с одного устройства на другое по Bluetooth с помощью расширенного профиля распространения аудио (A2DP).
BluetoothHealth- Представляет прокси-сервер профиля медицинского устройства, который управляет сервисом Bluetooth.
BluetoothHealthCallback- Абстрактный класс, который используется для реализации обратных вызовов
BluetoothHealth. Вам нужно расширить этот класс и реализовать методы обратного вызова, чтобы получать обновления об изменениях в состоянии регистрации приложения и состоянии канала Bluetooth. BluetoothHealthAppConfiguration- Представляет конфигурацию приложения, которую стороннее приложение Bluetooth Health регистрирует для связи с удаленным устройством Bluetooth Health.
BluetoothProfile.ServiceListener- Интерфейс, который уведомляет клиентов межпроцессного взаимодействия
BluetoothProfileо подключении к внутреннему сервису, запускающему определенный профиль, или отключении от него.