Подписаться на ANCS на Android
Основываясь на перечисленных здесь услугах, я пытаюсь подписаться на услугу с устройства Android, но не могу заставить эту работу работать. Пытался рекламировать использование 7905F431-B5CE-4E99-A40F-4B1E122D00D0
но периферийное устройство не отображается в списке устройств Bluetooth-устройств iPhone. Также проигрывается с (LE) сканирование и фильтры, чтобы обнаружить сервер ANCS без везения. Любой намек?
изменить: код
BleService.java
- Bluetooth LE RSSI для обнаружения близости iOS
- Возможно ли AVRCP на BLE с iOS?
- Как обнаружить соседние устройства с Bluetooth LE в iOS 7.1 как на заднем плане, так и на переднем плане?
- Центральный сервер и периферийный клиент CoreBluetooth
- Mi Band 1S вибрация при обработке входящих вызовов на iOS
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
написать запрос
написать ответ
- Как получить простые целочисленные значения по bluetooth в ios
- CoreBluetooth и MFi
- CLRegionState UnKnown Когда я в регионе
- Интервал подключения низкой частоты Bluetooth на iPhone
- Уникальный идентификатор для периферийного устройства BLE
- Исходное время для приложения Bluetooth LE для Iphone 4s
- Устройство сканирования фонового изображения CoreBluetooth
- Изменения в iOS api CoreBluetooth: BLE 4.0 против BLE 4.2
О, у меня была аналогичная проблема, убедитесь, что вы не используете локальные уведомления при тестировании на 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); }
Возможно, если бы вы могли опубликовать / связать свой код, я бы смог дополнительно диагностировать вашу точную проблему, но приведенный выше код был решением моей проблемы.