Профили Bluetooth

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. Подробнее о профиле медицинского устройства…

Ниже описаны основные этапы работы с профилем.

  1. Получите адаптер по умолчанию, как описано в разделе Настройка Bluetooth.
  2. Настройте BluetoothProfile.ServiceListener. Этот прослушиватель уведомляет клиентов BluetoothProfile о подключении к сервису или отключении от него.
  3. Используйте getProfileProxy(), чтобы установить подключение к объекту прокси-сервера профиля, связанному с профилем. В примере ниже прокси-объект профиля является экземпляром BluetoothHeadset.
  4. В onServiceConnected() получите дескриптор объекта прокси профиля.
  5. Получив прокси-объект профиля, используйте его, чтобы отслеживать состояние подключения и выполнять другие операции, связанные с этим профилем.

В следующем фрагменте кода показано, как подключиться к прокси-объекту 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:

  1. Получите ссылку на прокси-объект BluetoothHealth. Как и в случае с обычной гарнитурой и устройствами с профилем A2DP, чтобы установить подключение к прокси-объекту профиля, необходимо вызвать getProfileProxy() с BluetoothProfile.ServiceListener и типом профиля HEALTH.

  2. Создайте BluetoothHealthCallback и зарегистрируйте конфигурацию приложения (BluetoothHealthAppConfiguration), которая будет выступать в качестве приемника данных о состоянии.

  3. Установите подключение к устройству для контроля здоровья.

  4. После успешного подключения к медицинскому устройству вы можете считывать и записывать данные на него, используя дескриптор файла. Полученные данные необходимо интерпретировать с помощью менеджера здоровья, который реализует спецификации IEEE 11073.

  5. По завершении закройте канал и отмените регистрацию приложения. Канал также закрывается после длительного периода бездействия.