Подтвердить что ты не робот

Как реализовать приложение для блокировки приложений в Android?

Я не доволен какой-либо из программ-приложений для Android, которые я нашел и хотел бы создать самостоятельно, но мне трудно понять, как реализовать фактический замок. Как реализовать развертывание приложения для Android?

Есть две проблемы:

  • Обнаружение намерения, обычно из запуска программы startActivity() или из объявления, запускающего приложение для рынка (я не говорю о намерениях трансляции - мне нужно обрабатывать явные действия).

    • Разрешения для приложений-хранилищ, которые я видел, имеют "читать файлы системных журналов" и/или "извлекать запущенные приложения", что позволяет использовать опрос для поиска приложений. Я думаю, что смогу это сделать, но я хотел бы найти лучшее решение, если это возможно.
  • Предотвращение заблокированного приложения от обработки намерения. Я бы предпочел не позволять заблокированному приложению запускаться до тех пор, пока код доступа не будет введен, поскольку невозможно определить, что он может сделать при запуске.

    • При запуске моего текущего приложения locker, logcat показывает "ActivityManager: Запуск активности" сначала с Intent для заблокированного приложения, затем снова с Intent для приложения-шкафчика, между которыми нет ничего (разделено на 10-20 мс). Если я введу правильный пароль, то я увижу "ActivityManager: moveTaskToBack".
    • Я экспериментировал с тестовым приложением, которое демонстрирует, что, используя мой текущий блокиратор приложений, ни один из обратных вызовов Activity не активируется, если приложение заблокировано, и я не вводил правильный пароль. Таким образом, похоже, что это препятствует запуску приложения (но я не знаю, как это сделать).
    • Я могу использовать ActivityManager.killBackgroundProcesses(), чтобы остановить приложение, но у меня нет гарантии, что приложение еще не запущено к тому времени, когда оно "убито".
    • Я мог бы использовать PackageManager.setApplicationEnabledSetting(), чтобы предотвратить создание экземпляра приложения, но я не думаю, что он позаботится о уже запущенных приложениях (которые не должны обрабатывать новые намерения или выходите на передний план). Я мог бы использовать killBackgroundProcesses(), чтобы остановить все запущенные заблокированные процессы, чтобы их можно было повторно создать. Но мне не нравится этот подход, потому что другие приложения могут взаимодействовать с настройками Enabled и побеждать блокировку.
    • Оптимально, система отправляет каждое намерение в мое приложение для проверки и позволяет мне остановить или позволить ему пройти, но я уверен, что это невозможно (по крайней мере, не для явных намерений запускать действия из пусковой установки).

Кто-нибудь знает, как приложения для приложений для приложений блокируются или имеют какие-либо яркие идеи о том, как это можно сделать?

4b9b3361

Ответ 1

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

Проверка изменений в деятельности переднего плана может сделать трюк.

http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle