Android BluetoothHeadset getConnectedDevices () список пуст - PullRequest
1 голос
/ 09 февраля 2020

В моем приложении я хочу получить определенные сведения о подключенной гарнитуре Bluetooth. Сначала я подумал о подключении устройств с профилем гарнитуры.

 val result =  BluetoothAdapter.getDefaultAdapter()
        .getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET)

Фрагмент прослушивателя выглядит следующим образом:

private var mBluetoothHeadset: BluetoothHeadset? = null
private val mProfileListener = object : BluetoothProfile.ServiceListener {
    override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
        if (profile == BluetoothProfile.HEADSET) {
            mBluetoothHeadset = proxy as BluetoothHeadset
            val devices = mBluetoothHeadset?.connectedDevices
            devices?.forEach {
                println(it.name)
            }
        }
    }

    override fun onServiceDisconnected(profile: Int) {
        if (profile == BluetoothProfile.HEADSET) {
            mBluetoothHeadset = null
        }
    }
}

Я объявил необходимые разрешения в манифесте

 <uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

Но mBluetoothHeadset?.connectedDevices всегда возвращает пустой список. Но в моем планшете устройство уже подключено к блютуз гарнитуре. Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 19 февраля 2020

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

 private val states = intArrayOf(
    BluetoothProfile.STATE_DISCONNECTING,
    BluetoothProfile.STATE_DISCONNECTED,
    BluetoothProfile.STATE_CONNECTED,
    BluetoothProfile.STATE_CONNECTING
)
private val mProfileListener = object : BluetoothProfile.ServiceListener {
    override fun onServiceConnected(profile: Int, proxy: BluetoothProfile) {
        if (profile == BluetoothProfile.HEADSET) {
            mBluetoothHeadset = proxy as BluetoothHeadset
            val devices = mBluetoothHeadset?.getDevicesMatchingConnectionStates(states)
            devices?.forEach {
                println("${it.name} ${it.bondState}")
            }
        }
    }
...