I've got a problem that I'm completely flummoxed about, mostly because of how persistent it is.
I was writing a small Android app to communicate with my Bluegiga BLE113. I've connected to this device before, but I'd recently made a GATT modification that was not being reflected on the Android device (in none of the apps I tried - and I verified from a desktop and iOS app that my GATT was updated as expected).
I tried turning off/on Bluetooth and restarting my Nexus 7, and still nothing. Finally, I got desperate and tried the solution mentioned here: https://stackoverflow.com/a/22709467/992509 which uses reflection to hit a private BluetoothGatt method called refresh.
It seemed to work perfectly, as my new service was showing up, however, what I ran into was that my service (with only 1 characteristic) was showing a few hundred characteristics with the same UUID. The number of identical characteristics climbed everytime I ran my app, and even through device restarts and BT cycling.
Finally, I got desperate and did a factory reset on my Nexus (it's a test device, so I don't care). Didn't fix a thing, and this image shows what I'm seeing (10k characteristics):
My BLE113 GATT looks like this:
<service uuid="deadbeef-cdcd-cdcd-cdcd-cdcdcdcdcdcd">
<description>Debugging Service</description>
<characteristic uuid="deadbeef-0000-0000-0000-000000000000" id="xgatt_debug">
<description>Debugging output</description>
<properties read="true" notify="true" />
<value length="20" />
</characteristic>
</service>
The Android code is basically just a BluetoothGatt.discoverServices() (that's the first time I see this happen).
And again, I have tried resetting BT, restarting my Nexus, and doing a factory reset. Also, I've confirmed that my BLE peripheral works exactly as expected via a desktop app and iOS.
I'm on a Nexus 7, running 5.0.2, and targeting 4.4 in my app.