web-dev-qa-db-fra.com

Android - Obtenez l'UUID Bluetooth pour cet appareil

Je consultais Stack et Internet pour une solution simple pour obtenir le UUID de l'appareil que j'utilise actuellement. Je suis tombé sur messages comme celui-ci mais aucun d'eux ne semblait m'aider.

Le doc me dit à ce sujetgetUuids() fonction mais en parcourant le doc pour Android Bluetooth je finis par avoir un BluetoothAdapter mais j'ai besoin d'un BluetoothDevice pour exécuter cette fonction.

J'ai donc besoin de savoir ce qui suit:

1) La fonction renvoie-t-elle vraiment le périphérique UUID? Parce que le nom dit pluriel (getUuid s)

2) Comment puis-je obtenir une instance de ce BluetoothDevice?

Merci!

14
Ron

En utilisant la réflexion, vous pouvez invoquer la méthode cachée getUuids() sur le 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());
}

Voici le résultat sur un 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

où, par exemple, 0000111f-0000-1000-8000-00805f9b34fb est pour HandsfreeAudioGatewayServiceClass et 00001105-0000-1000-8000-00805f9b34fb est pour OBEXObjectPushServiceClass. La disponibilité réelle de cette méthode peut dépendre de la version de l'appareil et du firmware.

17
Stefano S.

Pour ce faire, vous devez définir l'autorisation Bluetooth:

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

Ensuite, vous pouvez appeler la méthode getUuids() en utilisant la réflexion:

    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();
    }

Vous devez activer le bluetooth pour obtenir des Uuids.

2
Jorgesys