Я пытаюсь разработать приложение, которое обычно считается вредоносным ПО, но требования клиента очень специфичны и логичны. У нас есть около 50-100 телефонов Android с cheapset, которые задвинуты, подключены, и приложение должно отправить некоторые данные датчика через tcp на удаленный сервер. Это звучит достаточно просто, но есть две особенности, с которыми я сталкиваюсь (поскольку я не опытный разработчик Android и никогда не использовал телефон):Специальное приложение для Android: автоматическое обновление и всегда включен?
# 1 Приложение должно быть всегда включено. Если он сбой, сервер должен получить отчет об ошибке (трассировка стека), и приложение должно быть перезапущено через 10 минут еще раз, прежде чем сдаться. Кроме того, ОС может теоретически убить приложение (хотя я сделал все возможное, чтобы свести к минимуму использование памяти). Я хотел бы как-то справиться с этим.
# 2 Было бы замечательно, если бы приложение можно было удаленно обновлять или обновлять автоматически, без какого-либо взаимодействия с пользователем (поскольку обычный пользователь не существует).
Чтобы реализовать # 1, я не вижу другого решения, кроме как подключить телефон (AlarmsManager не работает так, как я ожидал, и добавление другого приложения, чтобы позаботиться о первом, просто чувствует себя не так). Есть что-то, чего я не хватает?
Я не знаю, как подойти к реализации функции # 2 вообще. Если я поставлю приложение на рынок и отметьте флажок «держать это приложение всегда в актуальном состоянии» при его установке, это сработает? Я боюсь, что автоматическое обновление не произойдет во время работы службы, и даже если это произойдет, что ОС не перезапустит службу после установки обновления (если не будет реализована функция # 1). Если я программно загружаю последнюю версию .apk и открываю ее, мне все равно нужно, чтобы пользователь нажал кнопку «Установить». Я даже рассматриваю возможность применения обновляемой части на некоторых языках сценариев.
Есть ли решение этих проблем в рамках Android API?
EDIT: Спасибо всем за ваши ответы, вы были очень полезны. Кажется, что единственный способ заставить Android вести себя как не-пользовательская часть аппаратного обеспечения - это укоренить его. Это единственный способ сделать автоматические обновления. При этом всегда можно включить, включив cron (AlarmManager, по-видимому, не запускает событие в случае завершения службы с помощью аварии, но может быть использован другой тривиальной, не сбойной службой, чтобы поддерживать первую работу).
AlarmManager: Я настроил будильник на ELAPSED_REALTIME (раз в минуту) и выпустили до тех пор, как мое приложение было бежать, но перестали стрелять, когда я врезался в приложение (бросая исключение) или убить его с задачей менеджер. Может быть, я делаю это неправильно? –
Вы уверены, что GooglePlay убьет мое приложение, чтобы его обновить? Его служба запускает цикл проверки спящего режима. Если это так, и никто не должен нажать кнопку, это именно то, что я ищу (но я не мог найти никакой информации об этом, и я не собираюсь загружать что-то просто, чтобы проверить и видеть). –
Мне жаль говорить, что Google Play не будет убивать ваше приложение для обновления, вы должны сделать это сами. в отношении будильника - вам нужно написать службу, а не простое приложение, и пометить эту службу как STICKY, поэтому система будет знать, что она должна работать. – lenik