-
Notifications
You must be signed in to change notification settings - Fork 327
Open
Labels
Description
Describe the bug
No New Alert (0x2A46) on GATT Alert Notification Service (0x1811) - Samsung Android Device. Works on iPhone.
To Reproduce
Steps to reproduce the behavior:
- Connect & Bond with a BLE device with ANS service (0x1811) and New Alert (0x2A46)
- Enable CCCDs to enable notifications
- Scan a tag (in this case) to trigger the new alert characteristic
Expected behavior
To trigger a new alert notification for the New Alert (0x2A46) characteristic.
Logs
Log from two an Samsung Android device and iOS device using the same BLE reader. The Android shows no new alert notficiations, the iOS device does.
- Samsung S22 Ultra Android 15 (nothing shown after "All Services Enabled" as no new alert was recieved:
nRF Connect, 2025-07-24
Halo+ (44:B7:D0:81:03:BC)
V 18:36:32.806 Connecting to 44:B7:D0:81:03:BC...
D 18:36:32.806 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 18:36:33.006 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 18:36:33.006 Connected to 44:B7:D0:81:03:BC
D 18:36:33.006 wait(1600ms)
D 18:36:33.215 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 18:36:33.264 [Callback] Connection state changed with status: 22 and new state: DISCONNECTED (0)
E 18:36:33.264 Error 22 (0x16): GATT CONN TERMINATE LOCAL HOST
I 18:36:33.264 Disconnected
D 18:36:33.310 [Broadcast] Action received: android.bluetooth.device.action.ACL_DISCONNECTED
D 18:36:33.325 [Broadcast] Action received: android.bluetooth.device.action.BOND_STATE_CHANGED, bond state changed to: NONE (10), reason: UNKNOWN (0)
I 18:36:33.325 Bond information lost, reason: UNKNOWN (0)
D 18:36:34.145 gatt.close()
D 18:36:34.148 wait(200)
V 18:36:34.350 Connecting to 44:B7:D0:81:03:BC...
D 18:36:34.350 gatt = device.connectGatt(autoConnect = false, TRANSPORT_LE, preferred PHY = LE 1M)
D 18:36:34.842 [Broadcast] Action received: android.bluetooth.device.action.ACL_CONNECTED
D 18:36:34.845 [Callback] Connection state changed with status: 0 and new state: CONNECTED (2)
I 18:36:34.845 Connected to 44:B7:D0:81:03:BC
V 18:36:34.853 Discovering services...
D 18:36:34.853 gatt.discoverServices()
I 18:36:35.458 Connection parameters updated (interval: 7.5ms, latency: 0, timeout: 5000ms)
D 18:36:37.063 [Callback] Services discovered with status: 0
I 18:36:37.063 Services discovered
V 18:36:37.076 Generic Access (0x1800)
• Device Name [R W] (0x2A00)
• Appearance [R] (0x2A01)
• Peripheral Preferred Connection Parameters [R] (0x2A04)
Generic Attribute (0x1801)
• Service Changed [I] (0x2A05)
Client Characteristic Configuration (0x2902)
Device Information (0x180A)
• Serial Number String [R] (0x2A25)
• Hardware Revision String [R] (0x2A27)
• Firmware Revision String [R] (0x2A26)
• Software Revision String [R] (0x2A28)
• Manufacturer Name String [R] (0x2A29)
• Model Number String [R] (0x2A24)
Alert Notification Service (0x1811)
• Supported New Alert Category [B] (0x2A47)
• New Alert [N] (0x2A46)
Client Characteristic Configuration (0x2902)
• Supported Unread Alert Category [R] (0x2A48)
• Alert Notification Control Point [W] (0x2A44)
• Unread Alert Status [N] (0x2A45)
Client Characteristic Configuration (0x2902)
Health Thermometer (0x1809)
• Temperature Measurement [N R] (0x2A1C)
Client Characteristic Configuration (0x2902)
• Temperature Type [R] (0x2A1D)
Battery Service (0x180F)
• Battery Level [N R] (0x2A19)
Client Characteristic Configuration (0x2902)
D 18:36:37.076 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D 18:36:37.081 gatt.setCharacteristicNotification(00002a46-0000-1000-8000-00805f9b34fb, true)
D 18:36:37.084 gatt.setCharacteristicNotification(00002a45-0000-1000-8000-00805f9b34fb, true)
D 18:36:37.086 gatt.setCharacteristicNotification(00002a1c-0000-1000-8000-00805f9b34fb, true)
D 18:36:37.089 gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
I 18:36:37.167 Connection parameters updated (interval: 45.0ms, latency: 0, timeout: 5000ms)
V 18:37:00.636 Enabling services...
V 18:37:00.636 Enabling indications for 00002a05-0000-1000-8000-00805f9b34fb
D 18:37:00.637 gatt.setCharacteristicNotification(00002a05-0000-1000-8000-00805f9b34fb, true)
D 18:37:00.638 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0200)
I 18:37:00.702 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 02-00
A 18:37:00.702 "Indications enabled" sent
V 18:37:00.704 Indications enabled for 00002a05-0000-1000-8000-00805f9b34fb
V 18:37:00.704 Enabling notifications for 00002a46-0000-1000-8000-00805f9b34fb
D 18:37:00.704 gatt.setCharacteristicNotification(00002a46-0000-1000-8000-00805f9b34fb, true)
D 18:37:00.705 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0100)
I 18:37:00.792 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00
A 18:37:00.792 "Notifications enabled" sent
V 18:37:00.794 Notifications enabled for 00002a46-0000-1000-8000-00805f9b34fb
V 18:37:00.795 Enabling notifications for 00002a45-0000-1000-8000-00805f9b34fb
D 18:37:00.795 gatt.setCharacteristicNotification(00002a45-0000-1000-8000-00805f9b34fb, true)
D 18:37:00.797 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0100)
I 18:37:00.882 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00
A 18:37:00.882 "Notifications enabled" sent
V 18:37:00.885 Notifications enabled for 00002a45-0000-1000-8000-00805f9b34fb
V 18:37:00.885 Enabling notifications for 00002a1c-0000-1000-8000-00805f9b34fb
D 18:37:00.885 gatt.setCharacteristicNotification(00002a1c-0000-1000-8000-00805f9b34fb, true)
D 18:37:00.887 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0100)
I 18:37:00.972 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00
A 18:37:00.972 "Notifications enabled" sent
V 18:37:00.974 Notifications enabled for 00002a1c-0000-1000-8000-00805f9b34fb
V 18:37:00.974 Enabling notifications for 00002a19-0000-1000-8000-00805f9b34fb
D 18:37:00.974 gatt.setCharacteristicNotification(00002a19-0000-1000-8000-00805f9b34fb, true)
D 18:37:00.976 gatt.writeDescriptor(00002902-0000-1000-8000-00805f9b34fb, value=0x0100)
I 18:37:01.062 Data written to descr. 00002902-0000-1000-8000-00805f9b34fb, value: (0x) 01-00
A 18:37:01.062 "Notifications enabled" sent
V 18:37:01.064 Notifications enabled for 00002a19-0000-1000-8000-00805f9b34fb
V 18:37:01.065 All services enabled
- iPhone iOS Version 17.6.1 iPhone SE:
[18:57:07.3180] Normal: Scanner On.
[18:57:07.6210] Normal: Device Scanned.
[18:57:07.6220] Debug: [Callback] centralManager(central, didDiscover: peripheral, advertisementData: ["kCBAdvDataServiceUUIDs": <__NSArrayM 0x301dc65e0>(
Health Thermometer,
1811
)
, "kCBAdvDataIsConnectable": 1, "kCBAdvDataRxPrimaryPHY": 1, "kCBAdvDataRxSecondaryPHY": 0, "kCBAdvDataTimestamp": 775072627.618535, "kCBAdvDataLocalName": Halo+], rssi: -50)
[18:57:08.0630] Normal: Appearance changed from Generic to TemperatureSensor.
[18:57:19.2020] Debug: cbCentralManager.connect()
[18:57:19.3560] Debug: [Callback] centralManager(central, didConnect: peripheral)
[18:57:19.3560] Normal: Connected.
[18:57:19.3560] Debug: peripheral.discoverServices(nil)
[18:57:19.7090] Debug: [Callback] peripheral(peripheral, didDiscoverServices: nil)
[18:57:19.7100] Normal: Discovered Device Information, Alert Notification Service, Health Thermometer, and Battery Service Services.
[...]
[18:57:19.9480] Debug: peripheral.discoverDescriptors(for: 2A46)
[...]
[18:57:20.1850] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A46, error: nil)
[...]
[18:58:30.5270] Debug: cbCentralManager.cancelPeripheralConnection()
[18:58:30.5280] Debug: [Callback] centralManager(central, didDisconnectPeripheral: peripheral, error: nil)
[18:58:30.5280] Normal: Disconnected.
[18:58:32.8030] Debug: cbCentralManager.connect()
[18:58:33.0000] Debug: [Callback] centralManager(central, didConnect: peripheral)
[18:58:33.0000] Normal: Connected.
[18:58:33.0000] Debug: peripheral.discoverServices(nil)
[18:58:33.3570] Debug: [Callback] peripheral(peripheral, didDiscoverServices: nil)
[18:58:33.3570] Normal: Discovered Device Information, Alert Notification Service, Health Thermometer, and Battery Service Services.
[...]
[18:58:33.5980] Debug: peripheral.discoverDescriptors(for: 2A46)
[...]
[18:58:33.8360] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A46, error: nil)
[...]
[18:59:07.3210] Normal: Scanner Off.
[19:00:26.9500] Normal: Scanner On.
[19:00:29.0940] Normal: Scanner Off.
[19:00:35.1540] Debug: cbCentralManager.cancelPeripheralConnection()
[19:00:35.1550] Debug: [Callback] centralManager(central, didDisconnectPeripheral: peripheral, error: nil)
[19:00:35.1550] Normal: Disconnected.
[19:00:36.2280] Debug: cbCentralManager.connect()
[19:00:36.7820] Debug: [Callback] centralManager(central, didConnect: peripheral)
[19:00:36.7820] Normal: Connected.
[19:00:36.7820] Debug: peripheral.discoverServices(nil)
[19:00:37.1380] Debug: [Callback] peripheral(peripheral, didDiscoverServices: nil)
[19:00:37.1390] Normal: Discovered Device Information, Alert Notification Service, Health Thermometer, and Battery Service Services.
[...]
[19:00:37.3780] Debug: peripheral.discoverDescriptors(for: 2A46)
[...]
[19:00:37.6160] Debug: [Callback] peripheral(peripheral, didDiscoverDescriptorsFor: 2A46, error: nil)
[...]
[19:01:41.1480] Debug: peripheral.readValue(forCharacteristic: 2A24)
[19:01:41.2160] Debug: [Callback] peripheral(peripheral, didUpdateValueForCharacteristic: 2A24, error: nil)
[19:01:41.2160] Normal: Updated Value of Characteristic 2A24 to 4861 6C6F 2B.
[19:01:41.2160] Application: "Halo+" value received.
[19:01:59.4680] Debug: peripheral.setNotifyValue(01, forCharacteristic: 2A46)
[19:01:59.4680] Application: Setting Boolean true for Notifying Characteristic New Alert
[19:01:59.5160] Debug: [Callback] peripheral(peripheral, didUpdateNotificationStateFor: 2A46, error: nil)
[19:01:59.5160] Debug: [Callback] peripheral(peripheral, didUpdateValueForCharacteristic: 2A46, error: nil)
[19:01:59.5160] Normal: Updated Value of Characteristic 2A46 to 0001 3030 3030 3030 3030 3030 3030 3030 30.
[19:01:59.5160] Application: "0001 3030 3030 3030 3030 3030 3030 3030 30" value received.
[19:02:15.3560] Debug: [Callback] peripheral(peripheral, didUpdateValueForCharacteristic: 2A46, error: nil)
[19:02:15.3570] Normal: Updated Value of Characteristic 2A46 to 0001 3832 3630 3234 3432 3230 3030 3030 35.
[19:02:15.3580] Application: "0001 3832 3630 3234 3432 3230 3030 3030 35" value received.
Versions:
- Android version: 15
- Phone model: Samsung 22 Ultra - One UI version 7.0
- App Version: 4.29.1
Additional context
I don't have the log, but I know it does not work on Samsung Galaxy S9 Android Version 10, One UI version 2.5. This feels like a Samsung problem.