RxBluetooth 无法与设备建立连接
RxBluetooth unable to establish connection with device
我想使用 RxBluetooth 在两个 Android 设备之间传输一些文本。
我能够扫描并查看附近的设备,但在尝试连接到其中一个设备时遇到以下故障:
D/BluetoothUtils: isSocketAllowedBySecurityPolicy 开始:设备空
W/BluetoothAdapter: 调用 getBluetoothService() 时未调用 BluetoothManagerCallback
D/BluetoothSocket: connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[65]}
java.io.IOException: 读取失败,套接字可能关闭或超时,读取 ret: -1
这是我 运行 的代码,用于与选定的 BluetoothDevice
:
建立连接
mRxBluetooth.observeConnectDevice(bluetoothDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(new Consumer<BluetoothSocket>() {
@Override
public void accept(BluetoothSocket bluetoothSocket) throws Exception {
// Unable to reach here.
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// I reach this point with the message:
// java.io.IOException: read failed, socket might closed or timeout, read ret: -1
}
})
两台设备都启用了蓝牙,因为我能够从另一台设备上发现一个。
我使用的权限是:
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
谢谢。
问题已解决。
我忘了 observeBluetoothSocket()
:
mRxBluetooth
.observeBluetoothSocket("MyConnection", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(this::observeIncomingMessages,
throwable -> {/*Handle error*/});
Commonsguy's RxEcho(CommonsWare 的评论中建议的示例应用程序)帮助我意识到了这一事实。
RxEcho also helped me discover RxJava2 Extras by David Moten 这使得从套接字读取数据非常方便:
Strings.from(btSocket.getInputStream())
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(data -> {/* Post data to LiveData*/},
throwable -> {/* Handle error*/});
感谢您花时间阅读我的问题。
我想使用 RxBluetooth 在两个 Android 设备之间传输一些文本。 我能够扫描并查看附近的设备,但在尝试连接到其中一个设备时遇到以下故障:
D/BluetoothUtils: isSocketAllowedBySecurityPolicy 开始:设备空
W/BluetoothAdapter: 调用 getBluetoothService() 时未调用 BluetoothManagerCallback
D/BluetoothSocket: connect(), SocketState: INIT, mPfd: {ParcelFileDescriptor: FileDescriptor[65]}
java.io.IOException: 读取失败,套接字可能关闭或超时,读取 ret: -1
这是我 运行 的代码,用于与选定的 BluetoothDevice
:
mRxBluetooth.observeConnectDevice(bluetoothDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(new Consumer<BluetoothSocket>() {
@Override
public void accept(BluetoothSocket bluetoothSocket) throws Exception {
// Unable to reach here.
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// I reach this point with the message:
// java.io.IOException: read failed, socket might closed or timeout, read ret: -1
}
})
两台设备都启用了蓝牙,因为我能够从另一台设备上发现一个。
我使用的权限是:
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
谢谢。
问题已解决。
我忘了 observeBluetoothSocket()
:
mRxBluetooth
.observeBluetoothSocket("MyConnection", UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"))
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(this::observeIncomingMessages,
throwable -> {/*Handle error*/});
Commonsguy's RxEcho(CommonsWare 的评论中建议的示例应用程序)帮助我意识到了这一事实。 RxEcho also helped me discover RxJava2 Extras by David Moten 这使得从套接字读取数据非常方便:
Strings.from(btSocket.getInputStream())
.subscribeOn(mSchedulerProvider.io())
.observeOn(mSchedulerProvider.ui())
.subscribe(data -> {/* Post data to LiveData*/},
throwable -> {/* Handle error*/});
感谢您花时间阅读我的问题。