2012-03-05 3 views
5

Мне нужно знать UUID по API 8 (2.2) или, возможно, 2.3.3.Как получить UUID устройства Bluetooth?

Как я понимаю, в документации, то это должно быть разрешено:

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

Затмение дает мне: "Метод getUuids() не определено для типа BluetoothDevice" Но смотрите: http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#getUuids()

Кроме того, я хотел бы знать, как UUID, являются "поделен" внутри ParcelUuid []. Если мне когда-нибудь удастся добраться туда, как мне получить UUID из parcelUuid []? Документация для Android bluetooth кажется очень бедной, на мой взгляд.

Какая шутка! Теперь я стараюсь, чтобы получить его от намерения, но это тоже дает: * «EXTRA_UUID не может быть разрешен или не поле» *:

intent.getParcelableExtra(BluetoothDevice.EXTRA_UUID); 
+0

это будет поддерживать уровень API 15. Что такое уровень API? –

+0

Привет, столкнувшись с такой же проблемой, в моем проекте есть поддержка от android 2.3.1, min api level 8. Пожалуйста, помогите. –

+0

Привет. Долгое время прошло это сообщение, но теперь я столкнулся с этой же проблемой. У вас есть обходное решение для этого (мой минимальный API - 10)? Спасибо за любую подсказку – stefat

ответ

2

// это будет поддерживать от уровня API 15 и выше.

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" 

// Невозможно ухудшить связанное с ним оборудование. также нет поддерживающей банки. http://developer.android.com/sdk/compatibility-library.html

+0

Хорошо, но API 15 4.0.3 выпущен всего месяц назад. Мне нужно использовать bluetooth на 2.2 API 8! – Tombola

+0

Итак, способ сделать это - создать UUID? Это не свойство аппаратного обеспечения, это всего лишь номер, который я составляю, верно? – Tombola

+0

@Tombola вы можете получить uuid для Android 2.2 для подключения другого устройства? разместите свое решение здесь –

1

К сожалению, я не думаю, что есть какие-либо хороший способ, чтобы получить UUID поддержали на BluetoothDevice с уровнем API < 15. Я думаю, поэтому они добавили новые функции в API 15.

Обратите внимание, из docs for BluetoothClass

BluetoothClass полезен в качестве подсказки, чтобы приблизительно описать устройство (для примера , чтобы показать значок в пользовательском интерфейсе), но не надежно описывает , какие профили или услуги Bluetooth фактически поддерживаются устройством . Точное обнаружение службы выполняется с помощью запросов SDP, которые автоматически выполняются при создании сокета RFCOMM с createRfcommSocketToServiceRecord (UUID) и listenUsingRfcommWithServiceRecord (String, UUID).

Таким образом, возможно, класс устройства можно использовать в качестве подсказки относительно того, какие службы будут доступны до тех пор, пока вы не выполните одну из перечисленных функций. Конечно, это не помешает проверить класс, так как это не потребует каких-либо дополнительных операций Bluetooth.

Обратите внимание, что класс обслуживания также доступен (он является частью класса устройства), но это всего лишь общий класс, а не список конкретных служб (например, из SDP).

5

Вы должны использовать отражение использовать getUuids() и fetchUuidsWithSdp() на андроид версии < 3. Итак, попробуйте код:

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

В случае, если вы не можете получить UUID от getUuids() метода. Пожалуйста, попробуйте другой способ.

После успешного сканирования вы должны получить byte[] (scanRecord), поэтому из этого результата, если вы можете узнать UUID format, вы можете поэтапно поделить, чтобы получить правильный UUID в качестве этих кодов.

P/s: Важно знать, что вы должны знать UUID format, чтобы получить из индекса правильно.

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

Этот вопрос задается с '12, а ScanRecord входит в состав новых API Bluetooth LE. Этот вопрос предназначен для Bluetooth Classic. – jschlepp

Смежные вопросы