В моем приложении есть операция, которая сканирует устройства 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