Как я могу получить UUID устройства Bluetooth? - PullRequest
5 голосов
/ 05 марта 2012

Мне нужно знать UUID в API 8 (2.2) или, возможно, 2.3.3.

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

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

Eclipse дает мне: "Метод 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); 

Ответы [ 5 ]

5 голосов
/ 11 декабря 2012

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

Method method = phoneDevice.getClass().getMethod("getUuids", null);
ParcelUuid[] phoneUuids = (ParcelUuid[]) method.invoke(phoneDevice, null);
2 голосов
/ 05 марта 2012

// это будет поддерживаться с уровня 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

1 голос
/ 23 марта 2012

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

Примечание, из документов для BluetoothClass

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

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

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

0 голосов
/ 17 апреля 2015

В случае, если вы не можете получить 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 голосов
/ 05 марта 2012

попробуйте BluetoothAdapter class

любой вопрос, прочитайте: http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html

...