Подписаться на ANCS на Android

Основываясь на перечисленных здесь услугах, я пытаюсь подписаться на услугу с устройства Android, но не могу заставить эту работу работать. Пытался рекламировать использование 7905F431-B5CE-4E99-A40F-4B1E122D00D0 но периферийное устройство не отображается в списке устройств Bluetooth-устройств iPhone. Также проигрывается с (LE) сканирование и фильтры, чтобы обнаружить сервер ANCS без везения. Любой намек?

изменить: код

BleService.java

 public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) { Log.d(TAG, "setCharacteristicNotification"); if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, "BluetoothAdapter not initialized"); return; } mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); BluetoothGattDescriptor descriptor = characteristic.getDescriptor(UUID.fromString(SampleGattAttributes.DESCRIPTOR)); descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); mBluetoothGatt.writeDescriptor(descriptor) } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { if (status == BluetoothGatt.GATT_SUCCESS) { broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED); } } 

SampleGattAttributes.java

 public class SampleGattAttributes { public static String ANCS_SERVICE = "7905F431-B5CE-4E99-A40F-4B1E122D00D0"; public static String NOTIFICATION_SOURCE = "9FBF120D-6301-42D9-8C58-25E699A21DBD"; public static String DATA_CONTROL = "22EAC6E9-24D6-4BB5-BE44-B36ACE7C7BFB"; public static String DESCRIPTOR = "00002902-0000-1000-8000-00805f9b34fb"; } 

MainActivity.java

 private void displayServices(List<BluetoothGattService> services) { for (BluetoothGattService service : services) { if (service.getUuid().compareTo(UUID.fromString(ANCS_SERVICE)) == 0) { for (BluetoothGattCharacteristic characteristic : service.getCharacteristics()) { Log.d(TAG, "charac: " + characteristic.getUuid()); for (BluetoothGattDescriptor descriptor : characteristic.getDescriptors()) { Log.d(TAG, "desc: " + descriptor.getUuid()); } if (characteristic.getUuid().compareTo(UUID.fromString(NOTIFICATION_SOURCE)) == 0) { bleService.setCharacteristicNotification(characteristic, true); } } } } } private final BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (BleService.ACTION_GATT_SERVICES_DISCOVERED.equals(action)) { displayServices(bleService.getSupportedGattServices()); } } }; 

update: я могу найти службы и характеристики после подключения к сервису, рекламируемому на iPhone. Однако подписка на уведомления не вызывает onCharacteristicChanged после получения уведомления на iPhone.

update2: все вызовы writecript.setValue успешны и выполняются последовательно.

update3: используется часть кода из этого примера.

update4: тестовые устройства: Nexus 5X Android 6.0.1; iPhone 6S + iOS 10.3.1

update5: журналы BT

написать запрос введите описание изображения здесь

написать ответ введите описание изображения здесь

О, у меня была аналогичная проблема, убедитесь, что вы не используете локальные уведомления при тестировании на iOS, поскольку они не будут распространяться через ANCS. Вам нужны настоящие оповещения по любой причине.

Недавно я столкнулся с подобной проблемой. То, что я закончил делать, чтобы решить это, добавляет writeDescriptor в мой BluetoothGatt . Моя setCharacteristicNotification теперь выглядит так:

 public void setCharacteristicNotification(BluetoothGattCharacteristic characteristic, boolean enabled) { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(TAG, "BluetoothAdapter not initialized"); return; } mBluetoothGatt.setCharacteristicNotification(characteristic, enabled); BluetoothGattDescriptor descriptor = characteristic.getDescriptor( UUID.fromString("00002902-0000-1000-8000-00805f9b34fb")); descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE); mBluetoothGatt.writeDescriptor(descriptor); } 

Возможно, если бы вы могли опубликовать / связать свой код, я бы смог дополнительно диагностировать вашу точную проблему, но приведенный выше код был решением моей проблемы.

  • Почему мое периферийное устройство не подключено к другим?
  • Как сделать Raspberry Pi 3 доступным для iOS и CoreBluetooth?
  • Реклама Bluetooth MIDI на iOS вручную, без CABTMIDILocalPeripheralViewController
  • Можно ли публиковать сообщения с помощью Google Соседние сообщения в фоновом режиме в iOS?
  • Войдите в область iBeacon с приложением в фоновом режиме и запросите URL без уведомления.
  • Как редактировать рекламные данные?
  • как получить общедоступный адрес устройства Bluetooth с помощью core_bluetooth
  • Службы iOS Corebluetooth никогда не были обнаружены, но видны в рекламе.
  • Могут ли iBeacon сканировать устройства iOS, даже Bluetooth отключен?
  • Попытка извлечь ранее подключенное Bluetooth-устройство в приложение IOS не ответит сбой, если устройство выключено
  • Сколько времени требуется для обнаружения iBeacon во время мониторинга региона?
  • Давайте будем гением компьютера.