2011-05-06 15 views
20

No estoy satisfecho con ninguno de los programas de bloqueo de aplicaciones para Android que he encontrado y me gustaría crear el mío, pero estoy teniendo problemas para descubrir cómo implementar el bloqueo real. ¿Cómo se puede implementar un armario de aplicaciones para Android?¿Cómo implementar un armario de aplicaciones en Android?

Hay dos cuestiones:

  1. detectar una intención, por lo general desde el iniciador de llamar startActivity() o de un anuncio el lanzamiento de la aplicación de mercado (no estoy hablando de intentos de transmisión - Necesito manejar Intenciones de Actividad explícitas).

    • Los permisos para las aplicaciones del armario que he visto todos tienen "leer archivos de registro del sistema" y/o "recuperar aplicaciones en ejecución" lo que sugiere que podrían utilizar el sondeo para buscar lanzamientos de aplicaciones. Creo que podría hacer esto, pero me gustaría encontrar una mejor solución si es posible.
  2. Evitar que la aplicación bloqueada procese el intento. Preferiría no permitir que la aplicación bloqueada se ejecute hasta que se ingrese el código, ya que es imposible saber qué podría hacer cuando se inicie.

    • Cuando se ejecuta mi casillero aplicación actual, Logcat muestra "ActivityManager: la actividad A partir" en primer lugar con la intención para la aplicación bloqueada, a continuación, de nuevo con la intención para el armario de aplicación, sin valores intermedios (separados por 10-20ms) Si ingreso el código correcto, veo "ActivityManager: moveTaskToBack".
    • Experimenté con una aplicación de prueba que demuestra que, utilizando mi casillero de aplicaciones actual, ninguna de las devoluciones de llamada de la actividad se invoca si la aplicación está bloqueada y no ingreso la contraseña correcta. Parece que está impidiendo que la aplicación se inicie (pero no sé cómo).
    • Podría usar ActivityManager.killBackgroundProcesses() para detener una aplicación, pero no tengo garantía de que la aplicación no haya comenzado a ejecutarse cuando se "mate".
    • Podría ser capaz de usar PackageManager.setApplicationEnabledSetting() para evitar que se ejecute una instancia de una aplicación, pero no creo que se ocupe de las aplicaciones que ya se están ejecutando (a las que no se les debe permitir procesar nuevas Intenciones o llegar al primer plano). Es posible que pueda usar killBackgroundProcesses() para detener todos los procesos bloqueados en ejecución, por lo que tendrían que volver a crear instancias. Pero no me gusta este enfoque porque otras aplicaciones podrían interferir con la configuración habilitada y anular el bloqueo.
    • De manera óptima, el sistema enviará cada intento a mi aplicación para su inspección y me permitirá detenerla o dejarla pasar, pero estoy bastante seguro de que eso no es posible (al menos no para intentos explícitos de iniciar actividades desde un iniciador))

¿alguien sabe cómo las aplicaciones App Locker se implementan, o tiene alguna idea brillante sobre cómo se podría hacer?

+5

Las técnicas utilizadas por los "casilleros de aplicaciones" son los agujeros de seguridad. Estoy tratando de cerrarlos. – CommonsWare

+0

¿Qué hay de ocultar los lanzadores de las actividades ocultas junto con el mecanismo de bloqueo de nivel de intención? – aProgrammer

+0

@CommonsWare cualquier referencia en la aplicación de armarios de aplicaciones? – nida

Respuesta

Cuestiones relacionadas