The return value of GetUUIDs() is not well defined, its caching policy causes problems for its clients and significantly increases the complexity of the implementations.
// Returns the set of UUIDs that this device supports.
// * For classic Bluetooth devices this data is collected from both the EIR
// data and SDP tables.
// * For non-connected Low Energy Devices this returns the latest advertised
// UUIDs.
// * For connected Low Energy Devices for which services have not been
// discovered returns an empty list.
// * For connected Low Energy Devices for which services have been discovered
// returns the UUIDs of the device's services.
// * For dual mode devices this may be collected from both.
//
// Note: On ChromeOS and Linux, BlueZ persists all services meaning if
// a device stops advertising a service this function will still return
// its UUID.
I don't know enough about classic to know where best to expose this information for classic devices but for Low Energy Devices it would be great if it didn't include Advertised UUIDs and were only available if a device is connected and all its services have been discovered.
Comment 1 by luiz.von...@intel.com
, Apr 12 2017