Разработка приложения для мониторинга батареи в 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?