0

Я разработал приложение для Android Ble, состоящее из трех видов деятельности и одного сервиса: - первый для сканирования устройства - второй для подключения к устройству - третий для записи результата связи на экране - внутри службы есть некоторые функции для подключения к устройству, для проверки соединения, для автоматического повторного подключения и т. д., и эта услуга является запущенной службой и привязана к каждому действию (первое приложение запускает эту услугу)службы и три деятельности, начать сервис является правильным способом?

В каком-то учебнике я видел что в этом случае используется не запущенная служба, а связанная. Но мне интересно, когда мы переключаемся между двумя действиями, если служба не «запущена», существует ли риск того, что служба ower может быть закрыта из системы, потому что при переключении между действиями служба привязана ничем?

ответ

1

Два ответа на ваш вопрос - есть риск, что ваш сервис будет остановлен в любое время. Если вы создадите приложение вокруг идеи о том, что служба будет включена, когда вы переключитесь на действия, тогда у вас будет гораздо более сложный дизайн, чем вам нужно.

Вы можете заметить, что есть служба, определенная в примере: http://developer.android.com/guide/topics/connectivity/bluetooth-le.html

Эта услуга, как написано это только одна вещь. Он сканирует устройство, и когда он находит его, он передает BluetoothDevice (который является Parcelable). Затем служба прекращает сканирование. Этот код сканирования можно было бы легко использовать в приложении. Но ключ заключается в том, что сканирование завершается, и BluetoothDevice передается через намерение другому компоненту.

Хорошо помнить, что при использовании BLE ваше приложение уже разговаривает с сервисом. Поэтому определение новой службы для соединения BLE полностью избыточно (технически). Наличие нескольких действий для привязки к службе для общения с одним устройством ... возможно, но не без его осложнений. Количество крайних случаев, с которыми вы столкнетесь, заставляет усилие работать намного больше, чем просто говорить о работе с устройством напрямую.

Надеюсь, что это поможет.

Cheers.

+0

Вы кристально чистый спасибо! Лучший способ дать возможность всем приложениям общаться с одним и тем же устройством? Я должен как-то сохранить в памяти ссылку на устройство. Но на данный момент я не понимаю, как в примере с разработчиком Android вы связали, что они используют услугу. Почему они не делают этого в своей деятельности? – aeroxr1

+1

В примере используется служба, чтобы показать, как служба может использоваться для сканирования BLE. Это также показывает, что BluetoothDevice является Parcelable. –

+1

Вы можете сохранить свой BluetoothDevice в пакет, переданный Activity.onSaveInstanceState. Сохранение BluetoothDevice на диск - плохая идея. Когда приложение выключится, вы должны предположить, что любой BluetoothDevice недействителен. Вместо этого сканируйте новый. Вы можете отфильтровать свое сканирование с помощью BluetoothLeScanner.startScan (список , ScanSettings, ScanCallback). Однако UUID может сохраняться (строка). –