Как читать службу / характеристики Generic Access с помощью react-native-ble-manager

У меня есть клиентское приложение на Android 10, созданное с помощью React Native

Android SDK:
  API Levels: 23, 28
  Build Tools: 28.0.3
react: ^16.9.0 => 16.9.0
react-native: ^0.62.2 => 0.62.2

Что работает: обнаружение службы, подключающее чтение / запись / уведомление о пользовательских (128-битных) характеристиках

Что не работает: чтение характеристики службы общего доступа 0x1800

Обнаружение службы: BleManager.retrieveServices / snip / характеристики: [{характеристика: 2a00, свойства: [Объект], служба: 1800}, это полная характеристика имени устройства.

Я могу прочитать его с помощью любого клиентского приложения BLE, например LightBlue, значит серверная часть работает.

Я пробовал читать короткий 16-битный UUID:

    BleManager.read(peripheral.id, 
      '1800', 
      '2a00').then((readData) => {
      console.log(readData);          
    }).catch((error) => {
      console.log(error); 
    });

а также полная версия 128b:

BleManager.read(peripheral.id, 
  '00001800-0000-1000-8000-00805f9b34fb', 
  '00002a00-0000-1000-8000-00805f9b34fb').then((readData) => {
  console.log(readData);          
}).catch((error) => {
  console.log(error); 
});

В обоих случаях ошибка перехвата 00002a00-0000-1000-8000-00805f9b34fb не найдена.

Обратите внимание, что тот же код отлично работает для моих собственных пользовательских UUID. периферийный.id - это MAC-адрес периферийного устройства моего сервера.

Есть идеи, что может быть не так? Спасибо!


person Knut    schedule 18.09.2020    source источник
comment
Ваше сканирование работает? Я имею в виду обнаружение устройств?   -  person Abhinav Saxena    schedule 01.10.2020


Ответы (1)


Я нашел проблему. Это было состояние гонки, при котором службы извлечения не были завершены до считывания характеристик. Решение:

BleManager.retrieveServices(peripheral.id).then((peripheralInfo) => {
    BleManager.read(peripheral.id, 
      '1800', 
      '2a00').then((readData) => {
      console.log(readData);          
    }).catch((error) => {
      console.log(error); 
    });
})
person Knut    schedule 18.09.2020