Код: Выделить всё
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val manager = getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
adapter = manager.adapter
startScan()
}
private fun startScan() {
val scanner = adapter.bluetoothLeScanner
scanner.startScan(scanCallback)
}
private val psm: Int = 0x0081
private val scanCallback = object : ScanCallback() {
override fun onScanResult(type: Int, result: ScanResult) {
val device = result.device
val name = device.name ?: return
if (name == "L2CAP_COC_DEMO") {
Timber.i("FOUND device: $name @ ${device.address}")
adapter.bluetoothLeScanner.stopScan(this)
l2capconnect(device)
}
}
override fun onScanFailed(errorCode: Int) {
Timber.e("Scan failed: $errorCode")
}
}
private fun l2capconnect(device) {
val socket = device.createL2capChannel(psm)
socket!!.connect()
listenLoop() // custom method, but not yet relevant, this is never called
}
В настоящее время программа выходит из строя/время ожидания в сокете!!.connect(), вот упрощенная версия моих журналов:
Код: Выделить всё
- FOUND device: test
- Creating L2CAP CoC socket
- Connecting to socket...
Код: Выделить всё
Failed to connect L2CAP channel
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
Код: Выделить всё
app: STARTING ADVERTISING
app: BLE EVT: BLE_GAP_EVT_CONNECTED, EVT CODE: 16
app: Connected
app: BLE EVT: BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST, EVT CODE: 35
app: BLE EVT: BLE_GAP_EVT_DATA_LENGTH_UPDATE, EVT CODE: 36
app: BLE EVT: BLE_GAP_EVT_PHY_UPDATE_REQUEST, EVT CODE: 33
Код: Выделить всё
app: BLE EVT: BLE_GAP_EVT_DISCONNECTED, EVT CODE: 17
app: Disconnected
Подробнее здесь: https://stackoverflow.com/questions/798 ... an-android
Мобильная версия