When an iOS BLE peripheral enters the background state, the advertising packets are not emitted in the regular manner and they are placed in a special “overflow” area which is only detectable by another iOS device explicitly looking for this device.
The bluetooth-peripheral Background Execution Mode
That said, you should be aware that advertising while your app is in the background operates differently than when your app is in the foreground. In particular, when your app is advertising while in the background:
• The CBAdvertisementDataLocalNameKey advertisement key is ignored, and the local name of peripheral is not advertised.
• All service UUIDs contained in the value of the CBAdvertisementDataServiceUUIDsKey advertisement key are placed in a special “overflow” area; they can be discovered only by an iOS device that is explicitly scanning for them.
Is there any way an Android central (scanner) can detect any advertised custom UUID without having to connect to the iOS peripheral?
List<ParcelUuid> UUIDs = scanResult.getScanRecord().getServiceUuids(); if (UUIDs != null) { // Check for your custom serviceUUID here and if not found check if Apple device and queue it up for connection. }
Note, this process is asynchronous. The connections need to be synchronous. There is a lot more! Please explore the docs you'll figure it out. – Lozoya