У меня есть 3 компонента.
Действие 1 имеет кнопку для подключения и отключения подключения BLE.
Activity2 необходимо получить данные с устройства BLE.
Служба Вся логика подключения (например, getRemoteDevice(), connectGatt и т. д.) принадлежит службе.
Activity1 подключается к устройству BLE путем привязки службы.
Intent gattServiceIntent = new Intent(mContext,BleService.class);//In Activity1 context
bindService(gattServiceIntent, mServiceConnection,BIND_AUTO_CREATE);
и подключается к устройству ble, как только нажимается кнопка.
Теперь, когда я перехожу от Activity1 к Activity2, я отвязываю службу в Activity1.
mContext.unbindService(mServiceConnection);//In Activity1 context
Теперь, как мне использовать существующее подключение устройства BLE в Activity2?
Мое временное решение:
Я повторно подключаю устройство BLE при переходе к Activity2 с помощью нового экземпляра службы, привязанного к нему из контекста Activity2. . (Чего я не хочу.)
В Activity2 я проверяю, запущена ли уже моя служба, если она не запущена, то я снова привязываю службу из контекста Activity2.
if(!isMyServiceRunning(BleWrapper.class)){
Intent wrapperServiceIntent = new Intent(mContext,BleWrapper.class);
bindService(wrapperServiceIntent,mBLEWrapperServiceConnection,BIND_AUTO_CREATE);
}else{
Log.w(LOGTAG, "Service already connected. In onCreate");
}
активировать соединение в onServiceConnected() при обратном вызове ServiceConnection
@Override
public void onServiceConnected(ComponentName componentName,IBinder service) {
mBluetoothLeService = ((BleWrapper.LocalBinder) service).getService();
if (!mBluetoothLeService.initialize()) {
showAlertDialog(getString(R.string.ble_not_supported_on_this_device));
}else {
mBluetoothLeService = BleWrapper.getInstance();
}
mBluetoothLeService.connect(/*address from shared preference*/); //Reconnecting to the same device using address stored in Shared pref
}
Для проверки того, работает ли моя служба или нет
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
Но функция isMyServiceRunning() всегда возвращает false. это означает, что служба отключается при переходе от Activity1 к Activity2.
Любое решение для сохранения подключения к устройству ble во всех действиях?