Возможно ли автоматически подключаться к устройствам с низкой энергией Bluetooth (BLE)?Сопряжение устройства Bluetooth с низким энергопотреблением в Android
Android documentation указывает на то, что [BluetoothDevice.connectGatt()
] (https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, логическое значение, android.bluetooth.BluetoothGattCallback)) имеет параметр Autoconnect:
логическое значение, указывающее, следует ли автоматически подключаться к устройству BLE как только он становится доступным
Однако, для этого необходимо сначала ввести BluetoothDevice
. AFAIK - единственный способ получить это путем сканирования доступных устройств. Настройка сканирования каждый раз для подключения к устройству не кажется желательным. Кроме того, я попытался использовать nRF Control Master Panel для подключения к моему периферийному устройству с помощью autoConnect = true
, но это не подключается к устройству. Однако подключение без autoConnect
делает его подключенным, и мне удалось с успехом прочитать и записать данные с моего периферийного устройства.
Общий способ Bluetooth для подключения двух устройств. Однако поиск моего устройства BLE и использование BluetoothDevice.createBond()
не работает. В моем ACTION_BOND_STATE_CHANGED
-callback, EXTRA_BOND_STATE
и EXTRA_PREVIOUS_BOND_STATE
просто перейдите от BOND_BONDING
к BOND_NONE
и обратно. Я не зачитываю ошибку или что-то еще - поэтому, возможно, я что-то пропустил. Вот обратный вызов:
private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);
Log.e(TAG, "prevState " + prevState + ", state " + state);
}
}
};
Так что этот тип соединения не работает.
Мой вопрос: я делаю что-то неправильно для спаривания или autoConnect? Или как я сейчас работаю только с правильным правилом? Кажется, что настоящая боль (и утечка батареи) приходится каждый раз проверять устройства, видеть, есть ли устройство, если это так читать данные и проверять завтра, в противном случае проверить через час или около того. Пункт Bluetooth заключается в том, что он должен соприкасаться напрямую, когда он близок, не так ли?
Итак, каждый раз, когда приложение запускается, первый раз, когда я должен его проверять? Не похоже на очень удобный метод, а не на устройства сопряжения. – jdepypere
yes, Android ble stack не является простым в использовании)))) Все async, rescan при каждом запуске и т. Д. Вы можете попытаться сохранить все в липкой службе, но если он будет закрыт - потребуется повторное сканирование. – Raiv
Хорошо спасибо, думал, что у меня что-то не хватает, потому что я думал, что BLE будет широко поддерживаться ... – jdepypere