Android-получить Bluetooth UUID для этого устройства

Я просматривал стек и интернет для простого решения, чтобы получить UUID устройства, которое я сейчас использую. Я споткнулся!--7-->сообщения, как это

доктор говорит мне об этом getUuids() функция, но при прохождении через doc для Android Bluetooth а в BluetoothAdapter но мне нужен BluetoothDevice для выполнения этой функции.

поэтому мне нужно знать следующий:

1) функция, возвращающая действительно устройство UUID? Потому что имя говорит множественное число (getUuids)

2) Как получить экземпляр этого BluetoothDevice?

спасибо!

2 ответов


используя отражение, вы можете вызвать скрытый метод getUuids() на 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());
}

это результат на 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

где, например, 0000111f-0000-1000-8000-00805f9b34fb на HandsfreeAudioGatewayServiceClass и 00001105-0000-1000-8000-00805f9b34fb на OBEXObjectPushServiceClass. Фактическая доступность этого метода может зависеть от версии устройства и прошивки.


для достижения этого вы должны определить разрешение Bluetooth:

<uses-permission android:name="android.permission.BLUETOOTH"/>

затем вы можете вызвать метод getUuids() С помощью отражения:

    try {
    BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
    Method getUuidsMethod = BluetoothAdapter.class.getDeclaredMethod("getUuids", null);
    ParcelUuid[] uuids = (ParcelUuid[]) getUuidsMethod.invoke(adapter, null);

         if(uuids != null) {
             for (ParcelUuid uuid : uuids) {
                 Log.d(TAG, "UUID: " + uuid.getUuid().toString());
             }
         }else{
             Log.d(TAG, "Uuids not found, be sure to enable Bluetooth!");
         }

    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }

вы должны включить bluetooth, чтобы получить Uuids.