Как запретить пользователям закрывать приложения на Android?

У меня есть запрос на разработку приложения для отслеживания предприятий. Приложение должно иметь возможность получать текущую позицию телефона и отправлять ее на сервер каждые 5 минут. Даже если приложение работает в фоновом режиме, пользователь может легко его закрыть. Мне нужно создать какое-то ограничение для этого, возможно, на основе пароля. Чтобы закрыть это приложение, пользователь должен ввести пароль. И если он перезагружается, приложение должно автоматически запускаться после перезагрузки.

Можно ли сделать это?


person randomGuy    schedule 20.08.2012    source источник


Ответы (4)



Начиная с ICS, любое приложение, реализующее администрирование устройства, нельзя остановить. Но единственным недостатком является то, что пользователь может удалить администратора устройства.
Вы можете ограничить работу своего приложения только при включенном администраторе.
Еще один способ: если пользователь удаляет администратора, вы можете заблокировать все устройство с помощью пользовательский пароль с использованием resetpassword .

person nandeesh    schedule 20.08.2012
comment
Спасибо! Это интересная информация. Я думаю, это может быть то, что я ищу - person randomGuy; 21.08.2012

Если бы устройства были рутированы, вы могли бы реализовать это, но вы, вероятно, не смогли бы распространять приложение в виде APK из-за необходимой модификации системных файлов. Может быть, как Zip, прошитый через мод Clockwork. Остерегайтесь аннулирования гарантии на устройства.

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

На самом деле большая проблема, с которой вы столкнетесь, заключается в том, что пользователь может отключить GPS, а затем вы не можете снова включить его программно — если только вы не попытаетесь использовать эксплойт, который явно не идеален и не будет работать на всех устройствах.

Лучшая идея может заключаться в том, чтобы просто сообщать на ваш сервер всякий раз, когда пользователь отключает приложение или GPS. Вы будете знать, какой пользователь отключил его, чтобы ваша организация могла соответствующим образом наказать этого пользователя.

person CNorris    schedule 20.08.2012
comment
Некоторые люди в StackOverflow предполагают, что есть способ включить GPS программно, используя эксплуатируемую ошибку в управлении питанием. - person randomGuy; 20.08.2012
comment
Верно, но это эксплойт, поэтому помните, что на каком-то этапе Google или производитель устройства это исправят, и ваш эксплойт перестанет работать, так что это не очень хорошее решение, если вы хотите, чтобы ваше приложение работало долго. Если бы вы могли создать системное приложение, такое как «Настройки», включение GPS занимает практически одну строку, но вы просто не можете сделать его для распространения на стандартные устройства без рута. Редактировать: для ясности, я имею в виду, что это будет исправлено в будущей версии Android — устройства, на которых эксплойт работает сейчас, будут уязвимы для него навсегда, если они не получат обновление. - person CNorris; 20.08.2012
comment
да, я думаю, эксплойт не вариант! - person randomGuy; 21.08.2012

То, что вы ищете, это администрирование устройств

http://developer.android.com/guide/topics/admin/device-admin.html

На этой странице объясняется, как это работает и как вы можете изменить всевозможные политики в отношении паролей и отключить камеру.. и так далее.

О чем они почти не говорят, так это о том, что как только приложение включено от имени администратора устройства, вы не можете его убить или удалить, не отключив сначала эту функцию. Вам решать, как правильно реализовать кнопки включения/отключения.

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

public int onStartCommand (Intent intent, int flags, int startId)
    {
        return START_STICKY;
    }

Наконец, чтобы ваш сервис запускался при загрузке, вам нужно поймать трансляцию ACTION_BOOT_COMPLETED.

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

Укоренение телефона — еще одно решение, но вы, скорее всего, откроете больше дверей, чем закроете;)

person Rox Teddy    schedule 31.07.2015