Как создать несколько соединений одновременно в Android Bluetooth с низким энергопотреблением (BLE)? ⇐ Android
Как создать несколько соединений одновременно в Android Bluetooth с низким энергопотреблением (BLE)?
Я работаю над приложением 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)); вернуть истину; }
Я работаю над приложением 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)); вернуть истину; }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создайте Bluetooth-сервер BLE GATT с низким энергопотреблением с помощью .NET C#
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-