禁用蓝牙后,为什么InputStream会提供数据?

时间:2018-08-22 13:28:15

标签: android bluetooth inputstream rfcomm

我有一个应用程序,其中我正在打开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)
        }
    }
}

0 个答案:

没有答案