Tombola
Tombola

Reputation: 1141

How do I get the UUID of a bluetooth device?

I need to know UUID on API 8 (2.2) or possibly 2.3.3.

As I understand the documentation, this should be allowed:

    phoneDevice = blueAdapter.getRemoteDevice(phoneAddress);
    ParcelUuid[] phoneUuids = phoneDevice.getUuids();  // Won't compile

Eclipse gives me: "The method getUuids() is undefined for the type BluetoothDevice." But see: http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getUuids()

Also, I would like to know how the UUIDs are "parceled" inside the ParcelUuid[]. In case I ever manage to get there, how do I retrieve a UUID from a parcelUuid[]? Documentation for Android bluetooth seems to be very poor, in my opinion.

What a joke! Now I try to get it from the intent, but this too gives: *"EXTRA_UUID cannot be resolved or is not a field"*:

intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID); 

Upvotes: 5

Views: 27915

Answers (5)

Huy Tower
Huy Tower

Reputation: 7976

In case you can not get UUID from getUuids() method. Please try the other way.

After scanned successfully, you should receive byte[] (scanRecord), so from this result, if you can recognize UUID format you can split step by step to get correct UUID as these codes.

P/s : Important thing, you should know UUID format to get from index correctly.

// Put item into hash map
    // UUID from index 10 to 24 : 12233445566778899aabbccddeeff0
    StringBuilder mSbUUID = new StringBuilder();
    for (int i = 0; i < scanRecord.length; i++) {
        // UUID
        if (i >= 10 & i <= 24) {
            if (Integer.toHexString(
                    scanRecord[i]).contains("ffffff")) {
                mSbUUID.append(Integer.toHexString(scanRecord[i]).replace("ffffff", "") + "-");
            } else {
                mSbUUID.append(Integer.toHexString(scanRecord[i]) + "-");
            }
        }
    }

Upvotes: 0

Naka
Naka

Reputation: 1058

You have to use reflection to use the getUuids() and fetchUuidsWithSdp() on android version < 3. So, try the code:

Method method = phoneDevice.getClass().getMethod("getUuids", null);
ParcelUuid[] phoneUuids = (ParcelUuid[]) method.invoke(phoneDevice, null);

Upvotes: 5

Tom
Tom

Reputation: 17892

Unfortunately, I don't think there is any good way to get the UUID's supported by a BluetoothDevice with API level < 15. I guess that's why they added the new functions in API 15.

Note, from the docs for BluetoothClass

BluetoothClass is useful as a hint to roughly describe a device (for example to show an icon in the UI), but does not reliably describe which Bluetooth profiles or services are actually supported by a device. Accurate service discovery is done through SDP requests, which are automatically performed when creating an RFCOMM socket with createRfcommSocketToServiceRecord(UUID) and listenUsingRfcommWithServiceRecord(String, UUID).

So, perhaps the device class could be used as a hint as to what services will be available until you perform one of the listed functions. Certainly it doesn't hurt to check the class since this won't require any additional bluetooth operations.

Note that the service class is also available (it is part of the device class) but this is just a general class, not a listing of specific services (like from SDP).

Upvotes: 1

Pedro Paiva Portugal
Pedro Paiva Portugal

Reputation: 41

try BluetoothAdapter class

any question, read: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html

Upvotes: 0

Padma Kumar
Padma Kumar

Reputation: 20041

//this will support from API level 15 and above.

Broadcast Action: This intent is used to broadcast the UUID wrapped as a ParcelUuid of the remote device after it has been fetched. This intent is sent only when the UUIDs of the remote device are requested to be fetched using Service Discovery Protocol
    Always contains the extra field EXTRA_DEVICE
    Always contains the extra field EXTRA_UUID
    Requires BLUETOOTH to receive.
    Constant Value: "android.bluetooth.device.action.UUID"

//no way to degrade its hardware related. there is no supporting jar also. http://developer.android.com/sdk/compatibility-library.html

Upvotes: 2

Related Questions