Как создать несколько соединений одновременно в Android Bluetooth с низким энергопотреблением (BLE)?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как создать несколько соединений одновременно в Android Bluetooth с низким энергопотреблением (BLE)?

Сообщение Anonymous »


Я работаю над приложением BLE для Android.

Существует ли какая-либо процедура для одновременного подключения нескольких устройств BLE (создания нескольких подключений) в Android. Поскольку в моем приложении есть несколько источников света BLE, поэтому первый источник света успешно подключается, когда я нажимаю, чтобы подключиться ко второму источнику света, второй источник света также подключается. но через некоторое время второй свет автоматически отключается. Мне нужно подключить максимум 8 светильников.

Вот что я делаю

private Final BluetoothGattCallback mGattCallback = новый BluetoothGattCallback() { @Override public void onConnectionStateChange (BluetoothGatt gatt, int status, int newState) { Строка IntentAction; если (newState == BluetoothProfile.STATE_CONNECTED) { IntentAction = GattActions.ACTION_GATT_CONNECTED; BroadcastUpdate (намерениеAction); Log.i(DSERVICE_TAG, «Подключено к серверу GATT.»); // Попытка обнаружить сервисы после успешного подключения. Log.i(DSERVICE_TAG, «Попытка запуска обнаружения служб:» + mBluetoothGatt.discoverServices()); читатьRssi(); } иначе, если (newState == BluetoothProfile.STATE_DISCONNECTED) { IntentAction = GattActions.ACTION_GATT_DISCONNECTED; Log.i(DSERVICE_TAG, «Отключено от сервера GATT.»); BroadcastUpdate (намерениеAction); } } public void onReadRemoteRssi (BluetoothGatt gatt, int rssi, int status) { если (статус == BluetoothGatt.GATT_SUCCESS) { BroadcastUpdate(GattActions.ACTION_GATT_RSSI, rssi); } еще { Log.w(DSERVICE_TAG, "onReadRemoteRssi получил: " + статус); } } @Override public void onServicesDiscovered (BluetoothGatt gatt, int status) { если (статус == BluetoothGatt.GATT_SUCCESS) { Log.v(DSERVICE_TAG, "Uuids обнаруженного устройства ==" + gatt.getDevice().getUuids()); BroadcastUpdate(GattActions.ACTION_GATT_SERVICES_DISCOVERED); } еще { Log.w(DSERVICE_TAG, "onServicesDiscovered получил: " + статус); } } @Override public void onCharacteristicRead (BluetoothGatt gatt, характеристика BluetoothGattCharacteristic, состояние int) { если (статус == BluetoothGatt.GATT_SUCCESS) { Log.d("TestCharacter", "символ onCharacteristicRead " + характеристика.getUuid()); BroadcastUpdate(GattActions.ACTION_DATA_AVAILABLE, характеристика); BroadcastUpdate(GattActions.EXTRA_DATA, характеристика); filterCharacteristicOfDevices (гатт, характеристика); } } @Override public void onCharacteristicWrite (BluetoothGatt gatt, характеристика BluetoothGattCharacteristic, состояние int) { //super.onCharacteristicWrite(gatt, характеристика, статус); если (статус != BluetoothGatt.GATT_SUCCESS) { пытаться { Thread.sleep(100); } улов (InterruptedException e) { } writeCharacteristic(характеристика, gatt); } } И характеристики чтения и readRss()

public void readCharacteristic (характеристика BluetoothGattCharacteristic) { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(DSERVICE_TAG, «Адаптер Bluetooth не инициализирован»); возвращаться; } mBluetoothGatt.readCharacteristic(характеристика); пытаться { Thread.sleep(100); } улов (InterruptedException e) { } } публичная пустота readRssi() { if (mBluetoothAdapter == null || mBluetoothGatt == null) { Log.w(DSERVICE_TAG, «Адаптер Bluetooth не инициализирован»); возвращаться; } mBluetoothGatt.readRemoteRssi(); новый Handler().postDelayed(readRssi, 200); } частный Runnable readRssi = новый Runnable() { @Override публичный недействительный запуск() { //читаем удаленный rssi каждую секунду for (Map.Entry enterGatt: myApplication.deviceGattMap.entrySet()) { Строка deviceAddress = входGatt.getKey(); BluetoothGatt bluetothGatt = входGatt.getValue(); bluetothGatt.readRemoteRssi(); //задержка чтения rssi пытаться { Thread.sleep(200); } улов (InterruptedException e) { } } } }; и метод подключения, в котором я добавляю объект GATT в HashMap для каждого источника света: -
public boolean Connect (конечный строковый адрес) { if (mBluetoothAdapter == null || адрес == null) { Log.w(DSERVICE_TAG, «Адаптер Bluetooth не инициализирован или его адрес не указан.»); вернуть ложь; } // Ранее подключенное устройство. Попробуйте восстановить соединение. если (mBluetoothDeviceAddress! = ноль && адрес.equals(mBluetoothDeviceAddress) && mBluetoothGatt != ноль) { Log.d(DSERVICE_TAG, «Пытаюсь использовать существующий mBluetoothGatt для подключения.»); если (mBluetoothGatt.connect()) { вернуть истину; } еще { вернуть ложь; } } окончательное устройство BluetoothDevice = mBluetoothAdapter.getRemoteDevice(адрес); если (устройство == ноль) { Log.w(DSERVICE_TAG, «Устройство не найдено. Невозможно подключиться.»); вернуть ложь; } // Мы хотим напрямую подключиться к устройству, поэтому устанавливаем // автоподключение // параметр имеет значение false. mBluetoothGatt = device.connectGatt(this, false, mGattCallback); Log.d(DSERVICE_TAG, «Пытаюсь создать новое соединение.»); mBluetoothDeviceAddress = адрес; //Арун //задержка чтения rssi пытаться { Thread.sleep(100); } улов (InterruptedException e) { } //карта Гатта myApplication.deviceGattMap.put(mBluetoothDeviceAddress, mBluetoothGatt); пытаться { Thread.sleep(50); } улов (InterruptedException e) { } Log.d(DSERVICE_TAG, "GATTMAP SIZE=="+ myApplication.deviceGattMap.size()+"---"+myApplication.deviceGattMap.get(mBluetoothDeviceAddress)); вернуть истину; }
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»