我有一个应用程序,其中我正在打开rfcomm套接字以接收来自自定义蓝牙设备的数据,但我偶然发现了一些很奇怪的东西。
当我创建连接并开始从inputstream读取数据时,没有任何问题,但是随后我转到手机设置并完全禁用了蓝牙。当我仍处于调试模式时,我看到我仍在接收数据,没有任何中断,即使格式化良好。
由于随机数据非常严格,因此不可能将数据放入这些验证中,所以我的问题是:为什么?
万一有人想看代码。这是两种负责连接和接收与可观察流链接的数据的方法:
fun getConnection(device: BluetoothDevice): Single<BluetoothSocket> {
return Single.defer<BluetoothSocket> {
val socket: BluetoothSocket = createBluetoothSocket(device)
bluetoothUtil.cancelDiscovery()
try {
socket.connect()
Log.d("Bluetooth", "socket connected")
Single.just(socket)
} catch (e: Throwable) {
Log.d("Bluetooth", "socket connection failed")
try {
socket.close()
} catch (ex: Throwable) {
ex.printStackTrace()
}
Single.error(ConnectionError)
}
}
}
fun getRawData(bluetoothSocket: BluetoothSocket): Observable<ByteArray> {
return Observable.create { emitter ->
try {
val inputStream = bluetoothSocket.inputStream
val buffer = ByteArray(1024)
while(!emitter.isDisposed) {
val bytesRead = inputStream.read(buffer)
emitter.onNext(buffer.copyOfRange(0, bytesRead - 1))
}
} catch (e: Throwable) {
Log.d("Bluetooth", "error reading: ${e.message}")
emitter.onError(DataError)
}
}
}