2012-03-05 81 views
5

Necesito saber UUID en API 8 (2.2) o posiblemente 2.3.3.¿Cómo obtengo el UUID de un dispositivo bluetooth?

Según entiendo la documentación, esto se debe permitir:

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

Eclipse me da: "Los getUuids método() está definido para el tipo BluetoothDevice" Pero véase: http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getUuids()

Además, me gustaría saber cómo están los UUID "parceladas" dentro del ParcelUuid []. En caso de que logre llegar allí, ¿cómo recupero un UUID de un parcelUuid []? La documentación para Android bluetooth parece ser muy pobre, en mi opinión.

¡Qué chiste! ahora trato de conseguirlo de la intención, pero esto también da: * "EXTRA_UUID no se puede resolver o no es un campo" *:

intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID); 
+0

esto será compatible con el nivel de API 15. ¿Cuál es su nivel de API? –

+0

Hola enfrentándome al mismo problema, en mi proyecto tengo soporte de android 2.3.1, nivel mínimo de api 8. Por favor ayuda. –

+0

Hola. Pasó mucho tiempo desde este post, pero ahora estoy enfrentando exactamente este mismo problema. ¿Tiene alguna solución para eso (mi API mínima es 10)? Gracias por cualquier pista – stefat

Respuesta

2

// esto apoyará desde el nivel del API de 15 o más.

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 hay manera de degradar su hardware relacionado. no hay una jarra de apoyo también. http://developer.android.com/sdk/compatibility-library.html

+0

Bien, pero API 15 es 4.0.3 lanzado hace solo un mes. ¡Necesito usar bluetooth en 2.2 API 8! – Tombola

+0

Entonces, la forma de hacerlo es crear UUIDs? No es propiedad del hardware, es solo un número que invento, ¿verdad? – Tombola

+0

@Tombola ¿puede obtener el uuid para Android 2.2 para conectar otro dispositivo? publique su solución aquí –

1

Por desgracia, no creo que haya ninguna buena manera de obtener el UUID de apoyo de un BluetoothDevice con el nivel API < 15. supongo por eso se añaden las nuevas funciones de la API 15.

Tenga en cuenta, desde el docs for BluetoothClass

BluetoothClass es útil como una sugerencia para describir aproximadamente un dispositivo (para el ejemplo para mostrar un icono en la interfaz de usuario), pero no describe de manera confiable qué perfiles o servicios Bluetooth son compatibles con un dispositivo . La detección precisa del servicio se realiza mediante solicitudes SDP, que se realizan automáticamente al crear un socket RFCOMM con createRfcommSocketToServiceRecord (UUID) y listenUsingRfcommWithServiceRecord (String, UUID).

Entonces, tal vez la clase de dispositivo podría usarse como una pista sobre qué servicios estarán disponibles hasta que realice una de las funciones enumeradas. Ciertamente, no está de más comprobar la clase, ya que esto no requerirá ninguna operación adicional de bluetooth.

Tenga en cuenta que la clase de servicio también está disponible (es parte de la clase de dispositivo) pero esta es solo una clase general, no una lista de servicios específicos (como desde SDP).

5

usted tiene que utilizar la reflexión para utilizar los getUuids() y fetchUuidsWithSdp() en la versión androide < 3. Por lo tanto, probar el código:

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

En caso de que no se puede obtener el UUID de getUuids() método. Por favor, intente de otra manera.

Después de escanear con éxito, debe recibir byte[] (scanRecord), por lo que a partir de este resultado, si puede reconocer UUID format puede dividir paso a paso para obtener el UUID correcto como estos códigos.

P/s: Lo importante, debe saber UUID format para obtener correctamente el índice.

// 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

Esta pregunta es del '12, y ScanRecord es parte de las últimas API LE de Bluetooth. Esta pregunta está orientada para Bluetooth Classic. – jschlepp

Cuestiones relacionadas