Сохранение соединения Ble во всем приложении с использованием библиотеки RxAndroidBle

Я работаю над приложением BLE (используя библиотеку RxAndroidBle!), которое может подключаться к нескольким устройствам для какое-то время. В последнее время бизнес-требования немного изменились, и я должен сохранять связь со всеми устройствами на протяжении всего приложения. Что я имею в виду после того, как я подключился к устройству, я должен поддерживать стабильное соединение на всех экранах, и если я отключился, я должен сообщить об этом пользователю.

До сих пор у меня была своего рода BleManager, которая была абстракцией над RxBleClient, и BleDevice, которая была абстракцией над RxBleDevice. Оба этих класса были покрыты некоторыми реактивными интерфейсами, они были внедрены в соответствующие модули, и вся их подписка и отписка выполнялись в этих конкретных модулях экрана. Однако теперь я должен изменить подход, потому что мне нужно постоянно поддерживать связь.

Возникает вопрос: Есть ли лучший способ сохранить стабильное соединение с устройством Ble, кроме создания его в службе Android и сохранения подписок в этой службе? Все примеры/учебники Ble поддерживают это соединение. сервис, но я не большой поклонник этого решения, так как оно также не очень хорошо вписывается в мою архитектуру. Мне было интересно, могу ли я как-то связать это с экземпляром приложения или что-то в этом роде. Любая идея, кроме обслуживания, будет очень оценена.


person Jogosb    schedule 17.01.2018    source источник
comment
Сегодня утром я наткнулся на этот ответ, и решение похоже на то, что я реализовал, но все же требует использования службы .   -  person Jogosb    schedule 18.01.2018


Ответы (1)


Я бы лично сделал Сервис, а также «гарантировал», что он будет работать в течение всего жизненного цикла моего приложения.

Затем я построил бы абстракцию поверх службы и общался бы с ней, а не со службой напрямую.

person pawel.urban    schedule 18.01.2018
comment
Что именно Ты имеешь в виду, говоря сверху? У меня есть идея внедрить этот BleManager в эту службу, а поскольку это синглтон, внедрить его в другие модули. В сервисе я бы сохранил свои подписки и публиковал бы результаты в модулях экрана некоторыми Субъектами, которые будут распространять события. BleManager покрыт реактивным интерфейсом, поэтому я могу подписаться на эти темы, когда мне нужно. - person Jogosb; 18.01.2018
comment
Я имел в виду, что если ваш BleManager является абстракцией соединения BLE, то я бы создал другую абстракцию, которая будет представлять мой домен устройства, поэтому BLE будет только деталью реализации. Модули приложений не обязательно должны знать о BLE и прочем, но о бизнес-логике устройства. - person pawel.urban; 18.01.2018