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