Загрузить данные датчика с устройства Android на удаленный хост

Я хочу разработать приложение для Android, удовлетворяющее следующим требованиям:

  • Записывайте данные с датчика (например, акселерометра) примерно с частотой 10–30 Гц.
  • Загрузите эти необработанные данные на удаленный сервер (например, с помощью сокетов TCP).
  • Пользовательский интерфейс должен быть минимальным, всего пара кнопок для запуска или остановки записи и передачи данных.
  • Весь процесс должен быть незаметен для пользователя и продолжать работать даже при выключенном экране на несколько часов.
  • Время автономной работы не критично (должно хватить на несколько часов).

Видение: хотелось бы в квазиреальном времени анализировать показания датчиков группы пользователей без их вмешательства (кроме запуска приложения).

После некоторых исследований мне удалось выполнить эти задачи по отдельности и неэффективно. Я пробовал такие классы, как Service и IntentService, SensorEventListener и т. д. Я не знаю, следует ли мне использовать Thread, Service или IntentService для каждой задачи. Конкретно у меня серьезные проблемы с их общением.

Мои вопросы:

  1. Какие классы вы рекомендуете использовать для решения этой проблемы?
  2. Какое задание нужно выполнить на каждом из них?
  3. Если задачи выполняются в разных сущностях (потоках, сервисах, интентсервисах и т.д.), как мне их взаимодействовать (я думаю о задачах записи и выгрузки)?

Я прошу структуру наилучшей практики для решения моей проблемы. Вам не нужно вдаваться в подробности с точки зрения разработки/кодирования решения.

Большое спасибо и не стесняйтесь спрашивать, если что-то не ясно.

Дэйвид

ОБНОВИТЬ:

После дополнительных исследований и благодаря DROIDcoder мне удалось разработать скелет для моего приложения:

Поскольку это только предложение, я добавляю его как редакцию. Я опубликую подробный ответ, когда вся система заработает.

Остаются вопросы: можете ли вы подумать о лучшем дизайне приложения?

Спасибо еще раз!


person David    schedule 08.09.2014    source источник


Ответы (2)


вот мое предложение

Загрузить эти необработанные данные на удаленный сервер

Вы можете использовать синтаксический анализ JSON для связи с сервером. вы будете использовать AsynTask (фоновый поток) для загрузки фоновых данных

Весь процесс должен быть незаметен для пользователя и продолжать работать даже после отключения экрана на несколько часов.

Вы должны использовать сервисы для фоновой долгосрочной обработки

person Jamil    schedule 08.09.2014

Наконец, что я сделал:

Проблема 1: запись данных с датчика на фоне в течение длительного периода времени. Решено с помощью класса Service для инициализации датчика и прослушивания обратных вызовов.

Проблема 2: связывайте класс Activity, содержащий пользовательский интерфейс, с классом Service. Решено с помощью метода startService(Intent myMessage) из класса Activity в сочетании с переключателем в методе onStartCommand() из класса Service для классификации сообщения.

Проблема 3: связывайте класс Service с классом Activity. Решено зарегистрировать собственный BroadcastReceiver в действии и отправить намерения из службы. Я использовал его для обновления индикатора выполнения (в действии) во время загрузки файла (в службе). Исключительное руководство можно найти здесь.

Проблема 4: загрузить данные на удаленный сервер. Решено с помощью AsyncTask внутри службы, как в этом сайт.

person David    schedule 28.09.2014
comment
Меня попросили принять участие в проекте художника, где для одного решения может потребоваться приложение, такое как вы описываете. Мне было интересно, как далеко ты продвинулся в этом. Вы получили приложение в магазине приложений или просто создали его для личного использования? - person Michael S; 08.12.2015
comment
Хотя приложение было разработано как прототип, а не как конечный продукт, мы определенно использовали его в работе в течение нескольких месяцев и получили с его помощью значительное количество данных. Тестировщики смогли загрузить его из магазина Google Play, и во время записи не возникло серьезных проблем. Возможно, это не лучшая архитектура, но нам она подошла! - person David; 09.12.2015