Как программно подключить 2 устройства Android с Bluetooth?

Я разрабатываю приложение, которое должно автоматически подключать 2 устройства Android через Bluetooth. Предположим, что они уже спарены. Можно ли это достичь?

Конечно, это возможно. Я изложу короткий учебник из документации:

Начните с BluetoothAdapter – это ваш менеджер Bluetooth.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

Если bluetoothAdapter имеет значение NULL, это означает, что это устройство Android не поддерживает Bluetooth (у него нет радио Bluetooth. Хотя я думаю, что встретить эти устройства редко) …

Затем убедитесь, что Bluetooth включен:

 if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, request_code_for_enabling_bt); } 

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

Предположим, что пользователь включил (думаю, вы должны проверить, не сделал ли это, сделайте это в методе onActivityResult ). Мы можем запросить сопряженные устройства:

 Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBoundedDevices(); 

Затем переверните их: for(BluetoothDevice device : pairedDevices) и найдите тот, к for(BluetoothDevice device : pairedDevices) хотите подключиться.

После того как вы нашли устройство, создайте сокет для его подключения:

 BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR_UUID); 

YOUR_UUID – это объект UUID, содержащий специальный идентификатор вашего приложения. Читайте об этом здесь .

Теперь попытайтесь подключиться (устройство, к которому вы пытаетесь подключиться, должно иметь сокет, созданный с тем же UUID в режиме прослушивания):

 socket.connect(); 

Connect () блокирует ваш поток до тех пор, пока не будет установлено соединение или не возникнет ошибка – в этом случае будет выбрано исключение. Поэтому вы должны позвонить connect в отдельном потоке.

И там! Вы подключены к другому устройству. Теперь получите входные и выходные потоки:

 InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); 

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

Подробнее об этом и узнать, как создать сервер (здесь мы создали клиента) в документации Bluetooth.