2012-06-18 1 views
2

Я пытаюсь разработать приложение, которое обычно считается вредоносным ПО, но требования клиента очень специфичны и логичны. У нас есть около 50-100 телефонов Android с cheapset, которые задвинуты, подключены, и приложение должно отправить некоторые данные датчика через tcp на удаленный сервер. Это звучит достаточно просто, но есть две особенности, с которыми я сталкиваюсь (поскольку я не опытный разработчик Android и никогда не использовал телефон):Специальное приложение для Android: автоматическое обновление и всегда включен?

# 1 Приложение должно быть всегда включено. Если он сбой, сервер должен получить отчет об ошибке (трассировка стека), и приложение должно быть перезапущено через 10 минут еще раз, прежде чем сдаться. Кроме того, ОС может теоретически убить приложение (хотя я сделал все возможное, чтобы свести к минимуму использование памяти). Я хотел бы как-то справиться с этим.

# 2 Было бы замечательно, если бы приложение можно было удаленно обновлять или обновлять автоматически, без какого-либо взаимодействия с пользователем (поскольку обычный пользователь не существует).

Чтобы реализовать # 1, я не вижу другого решения, кроме как подключить телефон (AlarmsManager не работает так, как я ожидал, и добавление другого приложения, чтобы позаботиться о первом, просто чувствует себя не так). Есть что-то, чего я не хватает?

Я не знаю, как подойти к реализации функции # 2 вообще. Если я поставлю приложение на рынок и отметьте флажок «держать это приложение всегда в актуальном состоянии» при его установке, это сработает? Я боюсь, что автоматическое обновление не произойдет во время работы службы, и даже если это произойдет, что ОС не перезапустит службу после установки обновления (если не будет реализована функция # 1). Если я программно загружаю последнюю версию .apk и открываю ее, мне все равно нужно, чтобы пользователь нажал кнопку «Установить». Я даже рассматриваю возможность применения обновляемой части на некоторых языках сценариев.

Есть ли решение этих проблем в рамках Android API?

EDIT: Спасибо всем за ваши ответы, вы были очень полезны. Кажется, что единственный способ заставить Android вести себя как не-пользовательская часть аппаратного обеспечения - это укоренить его. Это единственный способ сделать автоматические обновления. При этом всегда можно включить, включив cron (AlarmManager, по-видимому, не запускает событие в случае завершения службы с помощью аварии, но может быть использован другой тривиальной, не сбойной службой, чтобы поддерживать первую работу).

ответ

1

Для # 1 вы можете использовать функцию переднего плана. Я не знаю, как часто вам нужно получать данные датчиков, но в чем проблема с AlarmManager? Я не вижу, как rooting может помочь с # 1. Вы не можете делать # 2 без укоренения или создания прошивки. Если вы устанавливаете приложение как системное приложение (в /system/app), вы можете использовать скрытый PackageManager, чтобы тихо установить новую версию. Использовать autoupdate Market/Play также следует, но у вас нет возможности контролировать расписание обновлений. И, да, он не перезапустит вашу службу, но если вы используете AlaramManager, это не должно быть проблемой.

В целом, акции Android не являются встраиваемой системой, которая дает вам полный контроль, поэтому в зависимости от того, сколько времени/усилий вы готовы потратить, вы можете немного настроить его (или найти пользовательский ПЗУ, который приближается к вашим требованиям).

+0

AlarmManager: Я настроил будильник на ELAPSED_REALTIME (раз в минуту) и выпустили до тех пор, как мое приложение было бежать, но перестали стрелять, когда я врезался в приложение (бросая исключение) или убить его с задачей менеджер. Может быть, я делаю это неправильно? –

+0

Вы уверены, что GooglePlay убьет мое приложение, чтобы его обновить? Его служба запускает цикл проверки спящего режима. Если это так, и никто не должен нажать кнопку, это именно то, что я ищу (но я не мог найти никакой информации об этом, и я не собираюсь загружать что-то просто, чтобы проверить и видеть). –

+0

Мне жаль говорить, что Google Play не будет убивать ваше приложение для обновления, вы должны сделать это сами. в отношении будильника - вам нужно написать службу, а не простое приложение, и пометить эту службу как STICKY, поэтому система будет знать, что она должна работать. – lenik

0

Re: вопрос № 2, есть несколько open-source (лицензированных по лицензии Apache Software 2.0), которые вы можете проверить и посмотреть, как это работает.

  1. http://code.google.com/p/auto-update-apk-client/ является андроид-клиент для службы автоматического обновления (я связан с), который является небольшой, простой в реализации и поддерживает молчаливые обновления на укорененных устройств.

  2. https://github.com/commonsguy/cwac-updater написан Марк Мерфи, однако может потребоваться, чтобы вы запустили свой собственный сервер обновлений, и я не уверен насчет обновлений.

+0

Спасибо, я им посмотрю. –