Bluetooth на Android - как подключиться к ПРАВИЛЬНОМУ устройству Bluetooth? - PullRequest
2 голосов
/ 06 июля 2011

Я пишу программу, которая говорит с внешним аксессуаром через rfcomm.Моя проблема в том, что я не знаю, как правильно идентифицировать мое устройство.то, как я делаю это сейчас, выглядит следующим образом:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
                .getBondedDevices();
        for (BluetoothDevice device : pairedDevices) {
            if (device.getName().equals(MY_DEVICE_NAME)) {
                this.myDevice = device;
                break;
            }
        }

Этот метод, однако, основан на названии устройства, которое мне кажется грязным и плохим :) Есть ли лучший способ сделать это?Я попытался посмотреть на все методы BluetoothDevice , но ни один из них не помог - действительно ли это имя - лучший способ сделать это?Я видел, что в некоторых местах люди говорят, что я должен использовать UUID, но это используется, чтобы открыть сокет для устройства, когда оно у меня есть:

            _socket = myDevice.createRfcommSocketToServiceRecord(MY_UUID);

Есть ли лучший способ сделать это?

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Устройства одного типа / функциональности и / или марки обычно имеют похожее название.Например, все устройства RN-41 от Roving Networks имеют следующее имя:

FireFly-XXXX

, где XXXX - это последние 4 цифры адреса устройства.Это означает, что вы можете использовать следующее для подключения к любому из них:

        if (device.getName().startsWith("FireFly-")) {
            this.myDevice = device;
            break;
        }

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

0 голосов
/ 18 июня 2012

Вы также можете использовать BluetoothDevice.getBluetoothClass (), чтобы определить, какие устройства могут иметь отношение.

BluetoothClass.getMajorDeviceClass () скажет вам примерно, какое это устройство - телефон, компьютер, аудио или видеоустройство или что-то еще. BluetoothClass.hasService () дополнительно определяет некоторые возможности устройства.

В каждом из основных классов определены некоторые второстепенные классы - что это за компьютер / аудио-видеоустройство / телефон / медицинское оборудование и т. Д.

Кроме того, в последних версиях платформы Android (уровень API 15+) вы можете запрашивать служебные записи устройства, не подключаясь к нему. См. BluetoothDevice.fetchUuidsWithSdp () и BluetoothDevice.getUuids ().

0 голосов
/ 06 июля 2011

Вы можете использовать myDevice.getAddress(), чтобы получить адрес устройства Bluetooth и сравнить его, он всегда будет уникальным (в отличие от имени)

...