Здесь я использую в Gradle последнее обновление библиотеки
compile 'com.polidea.rxandroidble: rxandroidble: 1.2.2'
до
compile 'com.polidea.rxandroidble2: rxandroidble: 1.7.1'
Согласно новым обновлениям, подписка теперь одноразовая, а список подписок теперь CompositeDisposable, а отмена подписки - удаление.
Но утилизация не отключает мое оборудование.
HashMap<String, ConnectionEntry> mConnections = new HashMap<>();
public Observable<RxBleConnection> getConnection(String mac) {
if (mConnections.containsKey(mac)) {
return mConnections.get(mac).getConnectionObservable();
} else {
if (isBluetoothEnabled()) {
ConnectionEntry entry = new ConnectionEntry();
RxBleDevice rxBleDevice = mRxBleClient.getBleDevice(mac);
Observable<RxBleConnection> connectionObservable = rxBleDevice
.establishConnection(false)
.takeUntil(entry.getDisconnectTriggerSubject())
.compose(new ConnectionSharingAdapter());
entry.setConnectionObservable(connectionObservable);
mConnections.put(mac, entry);
return connectionObservable;
}
}
return null;
}
public void triggerDisconnect(String mac) {
ConnectionEntry entry = mConnections.get(mac);
if (entry != null) {
synchronized (entry.getSubscriptions()) {
for (Disposable s : entry.getSubscriptions()) {
if (s != null && !s.isDisposed()) {
s.dispose();
}
}
}
entry.getSubscriptions().clear();
entry.setConnectionObservable(null);
entry.getDisconnectTriggerSubject();
entry.removeFlags();
mConnections.remove(mac);
Log.d(TAG, "Connection for " + mac + " removed");
}
}