вызов метода соединения в BluetoothSocket, сгенерированный createL2capChannel (), вызывает IOException - PullRequest
0 голосов
/ 01 мая 2020

Разработка приложения для мониторинга батареи в Airpods, которое использует протокол L2CAP для связи с airpods.

BluetoothAdapter на android может получить список устройств Bluetooth, соединенных с телефоном android. Таким образом, я смог найти объект BluetoothDevice в моих airpods.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_l2cap_test)
    var ba = BluetoothAdapter.getDefaultAdapter()
    var devices = ba.bondedDevices

    devices.forEach { bd ->
        Log.e("l2cap", bd.address)
        if(bd.address == "<MY_AIRPODS_ADDRESS>"){
            var channel = bd.createL2capChannel(1)
            channel.connect()
            Log.e("l2cap", channel.toString())
            var inputstream = channel.inputStream
            var outputstream = channel.outputStream

            outputstream.write(byteArrayOf(0x02, 0x0b, 0x20, 0x0f, 0x00, 0x0b, 0x00, 0x07, 0x05, 0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x0d, 0x03, 0x00, 0x00, 0x00), 0, 20)

        }
    }
}

Так что это пример активности, которая может воспроизвести возникшую ошибку, этот код вызовет IOException в строке channel.connect (), хотя я ожидал код просто отправляет сообщение через открытый выходной поток.

java .io.IOException: чтение не удалось, сокет может быть закрыт или истекло время ожидания, чтение ret: -1

- это сообщение об ошибке. попытался использовать createInsecureL2capChannel (), та же ошибка. в чем проблема при подключении к устройству bluetooth по протоколу l2cap?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...