Я разрабатываю приложение, которое должно автоматически подключать 2 устройства Android через Bluetooth. Скажем, они уже спарены. Можно ли это достичь?
Как программно соединить 2 андроид устройства с блютузом?
Ответ 1
Конечно, это возможно. Я сделаю краткое руководство из документации:
Начните с 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
метод onActivityResult
). Мы можем запросить сопряженные устройства:
Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
Затем зациклите их: 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.