Как получить уровень заряда батареи bluetooth-гарнитуры?

Я пытаюсь создать приложение, которое измеряет уровень заряда батареи подключенной в данный момент гарнитуры Bluetooth. Это приложение можно использовать на телефонах, в которых нет встроенной функции. При поиске в stackoverflow я нашел Как узнать состояние батареи Bluetooth-гарнитуры в android этот вопрос. Я получил подключенную в данный момент Bluetooth-гарнитуру с использованием профиля BluetoothProfile.HEADSET. Но в объекте устройства типа BluetoothDevice я не вижу никакого метода или свойства для определения уровня заряда батареи Bluetooth-гарнитуры. Я могу узнать название устройства и isAudioConnected.

возможный дубликат stackoverflow.com/questions/19539535/…

Arahasya 26.10.2018 08:39

Для предоставления этой информации вам понадобится гарнитура.

Phantômaxx 26.10.2018 11:04

Как проверить, предоставляет ли гарнитура эту информацию или нет? В игровом магазине есть приложения, которые обеспечивают уровень заряда батареи. Как они работают?

Sahil 26.10.2018 11:08

@Sahil Попробуй batON play.google.com/store/apps/…

Mahendran 01.08.2019 11:51
4
4
6 110
4

Ответы 4

Если вопрос касается функции Bluetooth HFP: функция индикаторов HF не является обязательной для обеих сторон. Если обе стороны поддерживают это, BluetoothHeadset будет транслировать BluetoothHeadset.ACTION_HF_INDICATORS_VALUE_CHANGED с BluetoothHeadset.EXTRA_HF_INDICATORS_IND_ID равным 2 (уровень заряда батареи) и BluetoothHeadset.EXTRA_HF_INDICATORS_IND_VALUE с областью действия 0..100. Не помните версию Android, где она была реализована, вам стоит ее проверить.

Также уровень заряда батареи может быть реализован в устройстве с помощью специфичных для поставщика команд HFP AT (особенно для старых устройств громкой связи) и, возможно, BLE.

Первым делом зарегистрировать BroadcastReciver с помощью "android.bluetooth.device.action.BATTERY_LEVEL_CHANGED"

и вы можете получить это действие от широковещательного приемника, а затем получить дополнительные данные с помощью "android.bluetooth.device.extra.BATTERY_LEVEL"

и если вы хотите запустить это действие, вам необходимо повторно подключить устройство Bluetooth или уровень заряда батареи устройства Bluetooth изменился.

Удачи тебе.

Подключил AirPods Pro к OnePlus 5T с Android 9. Ни одно из этих зарегистрированных событий не происходит:

"android.bluetooth.device.action.BATTERY_LEVEL_CHANGED"
"android.bluetooth.headset.profile.action.AUDIO_STATE_CHANGED"
"android.bluetooth.headset.action.HF_INDICATORS_VALUE_CHANGED"

Я нашел решение, но оно работает только на android 8 и выше

Я взял этот код с здесь

Котлин

 fun getBatteryLevel(pairedDevice: BluetoothDevice?): Int {
    return pairedDevice?.let { bluetoothDevice ->
        (bluetoothDevice.javaClass.getMethod("getBatteryLevel"))
            .invoke(pairedDevice) as Int
    } ?: -1
}

Другие вопросы по теме