Android Bluetooth подключить устройства
Как получить список всех подключенных устройств Bluetooth для Android независимо от профиля?
Кроме того, я вижу, что вы можете получить все подключенные устройства для определенного профиля через BluetoothManager.getConnectedDevices.
И я думаю, я мог видеть, какие устройства подключены, прослушивая подключения / отключения через ACTION_ACL_CONNECTED/ ACTION_ACL_DISCONNECTED... кажется подверженным ошибкам.
Но мне интересно, есть ли более простой способ получить список всех подключенных устройств Bluetooth.
3 ответа
Чтобы увидеть полный список, это двухэтапная операция:
- получить список подключенных устройств
- сканировать или обнаруживать все остальные в радиусе действия
Чтобы получить список и выполнить итерацию в настоящее время сопряженных устройств:
Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice d: pairdDevices) {
String deviceName = d.getName();
String macAddress = d.getAddress();
Log.i(LOGTAG, "paired device: " + deviceName + " at " + macAddress);
// do what you need/want this these list items
}
}
Discovery - немного более сложная операция. Для этого вам нужно указать BluetoothAdapter начать сканирование / обнаружение. Когда он находит вещи, он отправляет Intents, которые вам нужно получить с BroadcastReceiver.
Сначала мы настроим приемник:
private void setupBluetoothReceiver()
{
BroadcastRecevier btReceiver = new BroadcastReciver() {
@Override
public void onReceive(Context context, Intent intent) {
handleBtEvent(context, intent);
}
};
IntentFilter eventFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
// this is not strictly necessary, but you may wish
// to know when the discovery cycle is done as well
eventFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
myContext.registerReceiver(btReceiver, eventFilter);
}
private void handleBtEvent(Context context, Intent intent)
{
String action = intent.getAction();
Log.d(LOGTAG, "action received: " + action);
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i(LOGTAG, "found device: " + device.getName());
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.d(LOGTAG, "discovery complete");
}
}
Теперь осталось только сообщить адаптеру Bluetooth о начале сканирования:
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
// if already scanning ... cancel
if (btAdapter.isDiscovering()) {
btAdapter.cancelDiscovery();
}
btAdapter.startDiscovery();
Лучший способ получить ваши подключенные устройства, например:
сопряженное устройство
val btManager = baseContext.getSystemService(BLUETOOTH_SERVICE) as BluetoothManager val pairedDevices = btManager.adapter.bondedDevices if (pairedDevices.size > 0) { for (device in pairedDevices) { val deviceName = device.name val macAddress = device.address val aliasing = device.alias Log.i( " pairedDevices ", "paired device: $deviceName at $macAddress + $aliasing " + isConnected(device) ) } }
проверьте что подключено или нет.
Чтобы проверить, подключено ли сопряженное устройство или нет, вам необходимо использовать этот метод:
private fun isConnected(device: BluetoothDevice): Boolean {
return try {
val m: Method = device.javaClass.getMethod("isConnected")
m.invoke(device) as Boolean
} catch (e: Exception) {
throw IllegalStateException(e)
}
}
Таким образом вы получаете «подключенные» устройства, а не просто сопряженные устройства. Дальнейшее его состояние проверять не нужно.
val btManager = view.getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
val connectedDevices = btManager.getConnectedDevices(GATT)