2012-03-05 5 views
5

Ho bisogno di conoscere l'UUID su API 8 (2.2) o eventualmente su 2.3.3. Mi pare di capire la documentazione, questo dovrebbe essere consentitoCome ottengo l'UUID di un dispositivo bluetooth?

:

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

Eclipse mi dà: "I getUuids() metodo non è definito per il tipo BluetoothDevice" Ma vedi: http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getUuids()

Inoltre, vorrei sapere come gli UUID sono "parcellizzate" all'interno del ParcelUuid []. Nel caso in cui riesca a raggiungerlo, come faccio a recuperare un UUID da un parcelUuid []? La documentazione per il bluetooth Android sembra essere molto scarsa, secondo me.

Che scherzo! Ora cerco di ottenere da l'intento, ma anche questo dà: * "EXTRA_UUID non può essere risolto o non è un campo" *:

intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID); 
+0

questo supporterà dal livello API 15. qual è il tuo livello API? –

+0

Ciao affrontando lo stesso problema, nel mio progetto ho fornito supporto da Android 2.3.1, min api livello 8. Per favore aiuto. –

+0

Ciao. È passato molto tempo da questo post, ma ora sto affrontando lo stesso identico problema. Hai qualche soluzione per questo (la mia API minima è 10)? Grazie per qualsiasi suggerimento – stefat

risposta

2

// questo sosterrà dal livello di API 15 e sopra.

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" 

// nessun modo per degradare l'hardware relativo. non c'è nemmeno un barattolo di supporto. http://developer.android.com/sdk/compatibility-library.html

+0

Ok, ma l'API 15 è 4.0.3 rilasciata solo un mese fa. Devo usare bluetooth su 2.2 API 8! – Tombola

+0

Quindi, il modo per farlo è creare UUID? Non è una proprietà dell'hardware, è solo un numero che compongo, giusto? – Tombola

+0

@Tombola sei in grado di ottenere l'uuid per Android 2.2 per connettere un altro dispositivo? inserisci qui la tua soluzione –

1

Purtroppo, non credo che ci sia un buon modo per ottenere l'UUID supportato da un BluetoothDevice con livello di API < 15. Credo è per questo che hanno aggiunto le nuove funzioni in API 15.

nota, dal docs for BluetoothClass

BluetoothClass è utile come suggerimento per descrivere approssimativamente un dispositivo (per esempio per mostrare un'icona nell'interfaccia utente), ma non descrive in modo affidabile quali profili o servizi Bluetooth sono effettivamente supportati da un dispositivo . Il rilevamento accurato dei servizi viene effettuato tramite richieste SDP, che vengono eseguite automaticamente durante la creazione di un socket RFCOMM con createRfcommSocketToServiceRecord (UUID) e listenUsingRfcommWithServiceRecord (String, UUID).

Quindi, forse la classe del dispositivo potrebbe essere utilizzata come suggerimento su quali servizi saranno disponibili fino a quando non si eseguirà una delle funzioni elencate. Certamente non fa male a controllare la classe poiché questo non richiederà alcuna operazione bluetooth aggiuntiva.

Si noti che la classe di servizio è anche disponibile (fa parte della classe del dispositivo) ma questa è solo una classe generale, non un elenco di servizi specifici (come da SDP).

5

si deve utilizzare la reflection per utilizzare i getUuids() e fetchUuidsWithSdp() sulla versione di Android < 3. Quindi, cercare il codice:

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

Nel caso in cui non si può ottenere da UUID getUuids() metodo. Per favore prova l'altro modo.

Dopo aver eseguito correttamente la scansione, è necessario ricevere byte[] (scanRecord), quindi da questo risultato, se è possibile riconoscere UUID format è possibile dividere passo dopo passo per ottenere UUID corretto come questi codici.

P/s: Importante, è necessario conoscere UUID format per ottenere dall'indice correttamente.

// 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]) + "-"); 
      } 
     } 
    } 
+0

Questa domanda è da '12, e ScanRecord fa parte delle più recenti API Bluetooth LE. Questa domanda è orientata per Bluetooth Classic. – jschlepp