Bluetooth API поддерживает работу с профилями Bluetooth. Профиль Bluetooth – это спецификация беспроводного интерфейса для связи между устройствами на основе Bluetooth, например профиль Hands-Free. Чтобы мобильное устройство могло подключиться к беспроводной гарнитуре, оба устройства должны поддерживать профиль Hands-Free.
Bluetooth API поддерживает следующие профили Bluetooth:
- Гарнитура. Профиль Headset обеспечивает поддержку Bluetooth-гарнитур для использования с мобильными телефонами. В Android есть класс
BluetoothHeadset, который является прокси-сервером для управления сервисом Bluetooth-гарнитуры. Включает профили Bluetooth Headset и Hands-Free (v1.5). КлассBluetoothHeadsetподдерживает AT-команды. Подробнее об AT-командах, относящихся к поставщикам… - A2DP. Профиль A2DP (Advanced Audio Distribution Profile) определяет, как высококачественный звук может передаваться с одного устройства на другое по Bluetooth. В Android есть класс
BluetoothA2dp, который является прокси-сервером для управления сервисом Bluetooth A2DP. - Медицинское устройство. Android поддерживает профиль Bluetooth Health Device Profile (HDP). Это позволяет создавать приложения, которые используют Bluetooth для связи с медицинскими устройствами, поддерживающими Bluetooth, такими как пульсометры, тонометры, термометры, весы и т. д. Список поддерживаемых устройств и их коды специализации данных можно найти в документации Bluetooth.
Эти значения также упоминаются в спецификации ISO/IEEE 11073-20601 [7] как
MDC_DEV_SPEC_PROFILE_*в приложении Nomenclature Codes Annex. Подробнее о профиле медицинского устройства…
Ниже описаны основные этапы работы с профилем.
- Получите адаптер по умолчанию, как описано в разделе Настройка Bluetooth.
- Настройте
BluetoothProfile.ServiceListener. Этот прослушиватель уведомляет клиентовBluetoothProfileо подключении к сервису или отключении от него. - Используйте
getProfileProxy(), чтобы установить подключение к объекту прокси-сервера профиля, связанному с профилем. В примере ниже прокси-объект профиля является экземпляромBluetoothHeadset. - В
onServiceConnected()получите дескриптор объекта прокси профиля. - Получив прокси-объект профиля, используйте его, чтобы отслеживать состояние подключения и выполнять другие операции, связанные с этим профилем.
В следующем фрагменте кода показано, как подключиться к прокси-объекту BluetoothHeadset, чтобы управлять профилем гарнитуры:
Kotlin
var bluetoothHeadset: BluetoothHeadset? = null // Get the default adapter val bluetoothAdapter: BluetoothAdapter? = BluetoothAdapter.getDefaultAdapter() private val profileListener = object : BluetoothProfile.ServiceListener { override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = proxy as BluetoothHeadset } } override fun onServiceDisconnected(profile: Int) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = null } } } // Establish connection to the proxy. bluetoothAdapter?.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET) // ... call functions on bluetoothHeadset // Close proxy connection after use. bluetoothAdapter?.closeProfileProxy(BluetoothProfile.HEADSET, bluetoothHeadset)
Java
BluetoothHeadset bluetoothHeadset; // Get the default adapter BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); private BluetoothProfile.ServiceListener profileListener = new BluetoothProfile.ServiceListener() { public void onServiceConnected(int profile, BluetoothProfile proxy) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = (BluetoothHeadset) proxy; } } public void onServiceDisconnected(int profile) { if (profile == BluetoothProfile.HEADSET) { bluetoothHeadset = null; } } }; // Establish connection to the proxy. bluetoothAdapter.getProfileProxy(context, profileListener, BluetoothProfile.HEADSET); // ... call functions on bluetoothHeadset // Close proxy connection after use. bluetoothAdapter.closeProfileProxy(bluetoothHeadset);
AT-команды, зависящие от поставщика
Приложения могут регистрироваться для получения системных широковещательных рассылок с AT-командами, которые отправляются гарнитурами (например, команда +XEVENT от Plantronics). Например, приложение может получать широковещательные сообщения об уровне заряда батареи подключенного устройства и уведомлять пользователя или выполнять другие действия по мере необходимости. Создайте широковещательный приемник для намерения ACTION_VENDOR_SPECIFIC_HEADSET_EVENT, чтобы обрабатывать AT-команды, относящиеся к поставщику гарнитуры.
Профиль устройства для контроля за здоровьем
Android поддерживает профиль Bluetooth Health Device Profile (HDP). Bluetooth Health API включает классы BluetoothHealth, BluetoothHealthCallback и BluetoothHealthAppConfiguration, которые описаны в разделе Основные классы и интерфейсы.
При использовании Bluetooth Health API полезно понимать следующие ключевые концепции HDP:
- Источник
- Медицинское устройство, например весы, глюкометр или термометр, которое передает медицинские данные на умное устройство, например телефон или планшет Android.
- Раковина
- Умное устройство, которое получает медицинские данные. В приложении HDP приемник представлен объектом
BluetoothHealthAppConfiguration. - Регистрация
- Процесс, используемый для регистрации приемника для связи с определенным медицинским устройством.
- Подключение
- Процесс, используемый для открытия канала между медицинским устройством (источником) и умным устройством (приемником).
Как создать приложение HDP
Вот основные шаги по созданию приложения HDP:
Получите ссылку на прокси-объект
BluetoothHealth. Как и в случае с обычной гарнитурой и устройствами с профилем A2DP, чтобы установить подключение к прокси-объекту профиля, необходимо вызватьgetProfileProxy()сBluetoothProfile.ServiceListenerи типом профиляHEALTH.Создайте
BluetoothHealthCallbackи зарегистрируйте конфигурацию приложения (BluetoothHealthAppConfiguration), которая будет выступать в качестве приемника данных о состоянии.Установите подключение к устройству для контроля здоровья.
После успешного подключения к медицинскому устройству вы можете считывать и записывать данные на него, используя дескриптор файла. Полученные данные необходимо интерпретировать с помощью менеджера здоровья, который реализует спецификации IEEE 11073.
По завершении закройте канал и отмените регистрацию приложения. Канал также закрывается после длительного периода бездействия.