Search code examples
androidbluetoothuuidandroid-bluetooth

Android - Get Bluetooth UUID for this device


I was browing Stack and the internet for a simple solution to get the UUID of the device I'm currently using. I stumbled over posts like this but none of them seemed to help me.

The doc tells me about this getUuids() function but when going through the doc for Android Bluetooth I end up having a BluetoothAdapter but I need a BluetoothDevice to execute this function.

So I need to know the following:

  1. Is the function returning really the device UUID? Because the name saids plural (getUuids)

  2. How do I get an instance of this BluetoothDevice?


Solution

  • Using reflection you can invoke the hidden method getUuids() on the BluetoothAdater:

    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    
    Method getUuidsMethod = BluetoothAdapter.class.getDeclaredMethod("getUuids", null);
    
    ParcelUuid[] uuids = (ParcelUuid[]) getUuidsMethod.invoke(adapter, null);
    
    for (ParcelUuid uuid: uuids) {
        Log.d(TAG, "UUID: " + uuid.getUuid().toString());
    }
    

    This is the result on a Nexus S:

    UUID: 00001000-0000-1000-8000-00805f9b34fb
    UUID: 00001001-0000-1000-8000-00805f9b34fb
    UUID: 00001200-0000-1000-8000-00805f9b34fb
    UUID: 0000110a-0000-1000-8000-00805f9b34fb
    UUID: 0000110c-0000-1000-8000-00805f9b34fb
    UUID: 00001112-0000-1000-8000-00805f9b34fb
    UUID: 00001105-0000-1000-8000-00805f9b34fb
    UUID: 0000111f-0000-1000-8000-00805f9b34fb
    UUID: 0000112f-0000-1000-8000-00805f9b34fb
    UUID: 00001116-0000-1000-8000-00805f9b34fb
    

    where, for instance, 0000111f-0000-1000-8000-00805f9b34fb is for HandsfreeAudioGatewayServiceClass and 00001105-0000-1000-8000-00805f9b34fb is for OBEXObjectPushServiceClass. Actual availability of this method may depend on device and firmware version.