Как реализовать шкафчик приложений в Android?

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

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

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

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

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

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

20
задан Ian 6 May 2011 в 06:06
поделиться