Ну, во-первых, я настоятельно рекомендую вам использовать потрясающую библиотеку Bluetooth LE с открытым исходным кодом под названием RxAndroidBle. . Это значительно упростит весь процесс.
После того, как вы включили эту библиотеку в свой проект, вам нужно будет сделать следующее:
- Убедитесь, что Bluetooth включен и вы уже запросили у пользователя разрешения на определение местоположения.
- Поиск устройств
Пример:
RxBleClient rxBleClient = RxBleClient.create(context);
Disposable scanSubscription = rxBleClient.scanBleDevices(
new ScanSettings.Builder()
// .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // change if needed
// .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // change if needed
.build()
// add filters if needed
)
.subscribe(
scanResult -> {
// Process scan result here.
},
throwable -> {
// Handle an error here.
}
);
// When done, just dispose.
scanSubscription.dispose();
- Подключитесь к нужному устройству и используйте метод
writeCharacteristic()
для записи нужных байтов.
Пример:
device.establishConnection(false)
.flatMapSingle(rxBleConnection -> rxBleConnection.writeCharacteristic(characteristicUUID, bytesToWrite))
.subscribe(
characteristicValue -> {
// Characteristic value confirmed.
},
throwable -> {
// Handle an error here.
}
);
- Если вместо этого вы хотите настроить уведомление/индикацию для характеристики, вы можете сделать следующее:
Пример:
device.establishConnection(false)
.flatMap(rxBleConnection -> rxBleConnection.setupNotification(characteristicUuid))
.doOnNext(notificationObservable -> {
// Notification has been set up
})
.flatMap(notificationObservable -> notificationObservable) // <-- Notification has been set up, now observe value changes.
.subscribe(
bytes -> {
// Given characteristic has been changes, here is the value.
},
throwable -> {
// Handle an error here.
}
);
На их странице Github есть много информации, а также у них есть свой собственный выделенный тег в Stackoverflow.
person
dglozano
schedule
07.08.2019