Профили Bluetooth

Bluetooth API включает поддержку работы с профилями Bluetooth. Профиль Bluetooth — это спецификация беспроводного интерфейса для связи между устройствами на основе Bluetooth, например профиль Hands-Free. Чтобы мобильное устройство могло подключиться к беспроводной гарнитуре, оба устройства должны поддерживать профиль Hands-Free.

Bluetooth API предоставляет реализации для следующих профилей Bluetooth:

  • Гарнитура . Профиль «Гарнитура» обеспечивает поддержку гарнитур Bluetooth для использования с мобильными телефонами. Android предоставляет класс BluetoothHeadset , который является прокси-сервером для управления службой Bluetooth-гарнитуры. Сюда входят профили Bluetooth-гарнитуры и Hands-Free (v1.5). Класс BluetoothHeadset включает поддержку AT-команд. Дополнительную информацию по этой теме см. в разделе AT-команды, зависящие от поставщика .
  • А2ДП . Профиль Advanced Audio Distribution Profile (A2DP) определяет, как высококачественный звук может передаваться с одного устройства на другое через соединение Bluetooth. Android предоставляет класс BluetoothA2dp , который является прокси-сервером для управления службой Bluetooth A2DP.
  • Устройство здоровья . Android обеспечивает поддержку профиля устройства Bluetooth Health (HDP). Это позволяет создавать приложения, использующие Bluetooth для связи с медицинскими устройствами, поддерживающими Bluetooth, такими как пульсометры, измерители крови, термометры, весы и т. д. Список поддерживаемых устройств и соответствующие им коды специализации данных устройств см. в разделе «Специализации данных устройств Bluetooth HDP» . Эти значения также упоминаются в спецификации ISO/IEEE 11073-20601 [7] как MDC_DEV_SPEC_PROFILE_* в Приложении «Номенклатурные коды». Дополнительные сведения о HDP см. в разделе «Профиль устройства работоспособности» .

Вот основные этапы работы с профилем:

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

В следующем фрагменте кода показано, как подключиться к прокси-объекту BluetoothHeadset , чтобы можно было управлять профилем гарнитуры:

Котлин

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)

Ява

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-команд конкретного поставщика, отправляемых гарнитурами (например, команды Plantronics +XEVENT). Например, приложение может получать широковещательные сообщения, указывающие уровень заряда батареи подключенного устройства, и может уведомлять пользователя или предпринимать другие действия по мере необходимости. Создайте широковещательный приемник для намерения ACTION_VENDOR_SPECIFIC_HEADSET_EVENT для обработки AT-команд конкретного поставщика для гарнитуры.

Профиль медицинского устройства

Android поддерживает профиль устройства Bluetooth Health (HDP). API Bluetooth Health включает классы 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. Когда закончите, закройте канал здоровья и отмените регистрацию приложения. Канал также закрывается при длительном бездействии.