Bluetooth соединение: Android - PullRequest
0 голосов
/ 08 января 2019

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

Если выбранное устройство уже сопряжено, я должен подключиться к этому устройству. т. е. пользователь нажимает на динамик Bluetooth, мое приложение должно установить соединение. После некоторого копания я подключился к колонкам с BluetoothA2DP

bluetoothAdapter.getProfileProxy(this, new BluetoothProfile.ServiceListener() {

    @Override
    public void onServiceConnected(int i, BluetoothProfile bluetoothProfile) {
    }

    @Override
    public void onServiceDisconnected(int i) {
    }
}, BluetoothProfile.A2DP);

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

Я видел RfCommSocket учебные пособия по подключению. Но есть путаница, мое устройство клиент или сервер? RfComm - это путь? Согласно этому ответу на другой вопрос, «Без прослушивания на другом устройстве гнезда Bluetooth с точно таким же UUID вы не сможете обмениваться данными» Означает ли это мое приложение и устройство, к которому я пытаюсь подключиться, должны как-то использовать один и тот же UUID? Как это возможно?

Я посмотрел в android.bluetooth.BluetoothSocket класс. В списке есть и другие сокеты

/** RFCOMM socket */
public static final int TYPE_RFCOMM = 1;

/** SCO socket */
public static final int TYPE_SCO = 2;

/** L2CAP socket */
public static final int TYPE_L2CAP = 3;

/** L2CAP socket on BR/EDR transport
 * @hide
 */
public static final int TYPE_L2CAP_BREDR = TYPE_L2CAP;

/** L2CAP socket on LE transport
 * @hide
 */
public static final int TYPE_L2CAP_LE = 4;

BluetoothClass.Device перечисляет так много различных типов устройств. Но нет информации о том, как подключаться к этим устройствам.

Как кто-то может узнать, какое соединение установить при подключении к устройству Bluetooth?

NB: Я почти уверен, что сказал несколько глупостей в этом вопросе. Я очень мало знаю о Bluetooth

...