Android: связь различных действий

#android #android-activity

#Android #android-активность

Вопрос:

У меня есть вопрос (не основанный на коде), касающийся взаимодействия между различными компонентами приложения.

Я хочу написать «большой» инструмент ведения журнала / отслеживания. Этот инструмент состоит примерно из 3 частей.

  1. Часть, моя основная деятельность. Я хочу начать / остановить отслеживание / ведение журнала на этом этапе, щелкнув / сняв флажок
  2. Часть, часть местоположения, в которой я хочу отслеживать историю местоположений пользователя (через Location API)
  3. Часть, часть регистрации датчиков, в которой я отслеживаю все данные датчиков, которые я могу получить со смартфона пользователя.

В части 2 и части 3 я хочу установить настройки API определения местоположения (например, точность и время обновления) и API датчиков, дополнительно в части 3 я хочу активировать / деактивировать различные датчики для ведения журнала.

В части 1, моей основной деятельности, я хочу начать полное ведение журнала / отслеживание.

Это более подробно объясняется на прилагаемой картинке.

У меня нет проблем с кодированием на JAVA. Моя проблема в том, что я новичок в Android. У меня нет никаких проблем с одним видом деятельности. Но с более чем одним… ууух. Я не понимаю связи между моей основной активностью и, например, активностью местоположения (имена, указанные на картинке)

В JAVA у меня было бы собственное местоположение / датчик классов, в котором я бы хранил свою логику.

После нажатия кнопки «Нажать, чтобы включить отслеживание» я бы создал 2 потока (для определения местоположения и датчиков), в которых начнется отслеживание. Оба сохранят свои данные в списках, и после того, как я перестану отслеживать, они будут записаны в текстовые файлы так, как я этого хочу.

А в Android? В моем особом случае? Есть ли у меня 3 действия? Должен ли я общаться с помощью намерений? Это немного сбивает с толку, потому что в этом случае все эти действия будут иметь свои собственные onCreated()/onStop()/ … Методы. Поэтому мне нужно отделить мою логику отслеживания / ведения журнала от моих действий, потому что я только хочу выбрать / установить свои настройки и закрыть свое местоположение / ведение журнала, чтобы после этого вернуться к моей основной активности.

Было бы здорово, если бы вы могли порекомендовать учебник или помочь мне в противном случае.

введите описание изображения здесь

Комментарии:

1. developer.android.com/training/run-background-service/…

Ответ №1:

Предполагая, что вы хотите получать события местоположения и датчиков, даже когда ваше приложение работает в фоновом режиме, я бы предложил следующее:

  • Храните свои настройки отслеживания в некотором постоянном хранилище, например, SharedPreferences, ваши экраны конфигурации (Activity / Fragment) просто считывают и записывают эти настройки
  • В вашем основном действии, когда флажок установлен, прочитайте последнюю конфигурацию, начните отслеживание, а также подтвердите, что ваш трекер включен
  • Для запроса местоположений используйте методы, которые принимают PendingIntent в качестве аргумента, например http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(long , float, android.местоположение.Критерии, android.app.PendingIntent) и установите цель PendingIntent для IntentService, где вы обрабатываете и сохраняете местоположения
  • Чтобы запрашивать события датчика, вам нужен активный слушатель. Создайте отдельную службу, которая, например, вызывается с регулярным интервалом через AlarmManager для сбора выборки данных датчиков, которые затем могут быть сохранены

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

В конце концов, вы можете получить такую архитектуру:

  • Пользовательский интерфейс: действия, которые редактируют параметры отслеживания и включают / отключают отслеживание
  • TrackingHelper: класс с логикой для включения / отключения отслеживания — регистрирует прослушиватель местоположения и сигналы тревоги, которые запускают SensorService для сбора некоторых данных датчика
  • SensorService: служба, которая регистрируется для прослушивания событий датчика в течение запрошенного интервала, а затем останавливается сама
  • LoggerService: IntentService, который получает объекты местоположения (и, возможно, другие данные) и сохраняет их
  • BootReceiver: широковещательный приемник, который вызывает TrackingHelper.startTracking (если отслеживание включено)