android - fit - caniuse
¿Cómo implementar un app locker en android? (1)
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 tengo problemas para descubrir cómo implementar el bloqueo real. ¿Cómo se puede hacer para implementar un bloqueo de aplicaciones para Android?
Hay dos cuestiones:
Detectar una Intención, generalmente desde el lanzador que llama a startActivity () o desde un anuncio que lanza la aplicación de mercado (no estoy hablando de intenciones de transmisión, necesito manejar intenciones de actividad explícitas).
- Los permisos para las aplicaciones de bloqueo que he visto tienen "lectura de archivos de registro del sistema" y / o "recuperar aplicaciones en ejecución", lo que sugiere que podrían usar el sondeo para buscar lanzamientos de aplicaciones. Creo que podría hacer esto, pero me gustaría encontrar una solución mejor si es posible.
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 de acceso, ya que es imposible saber qué podría hacer cuando se inicie.
- Al ejecutar mi aplicación actual, Logcat muestra primero "ActivityManager: Starting activity" con el Intent para la aplicación bloqueada, luego nuevamente con el Intent para la aplicación locker, sin nada entre (separado por 10-20ms). Si ingreso el código de acceso correcto, veo "ActivityManager: moveTaskToBack".
- He experimentado con una aplicación de prueba que demuestra que, al usar mi casillero de la aplicación actual, no se invoca ninguna de las devoluciones de llamada de la actividad si la aplicación está bloqueada y no ingreso el código de acceso correcto. Así que parece estar 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 ninguna garantía de que la aplicación no haya comenzado a ejecutarse en el momento en que se "elimine".
- Es posible que pueda usar PackageManager.setApplicationEnabledSetting () para evitar que se cree una instancia de una aplicación, pero no creo que eso se ocupe de las aplicaciones que ya se están ejecutando (a las que no se debe permitir procesar nuevos Intents o llegar a la 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 alterar la configuración de Habilitado y anular el bloqueo.
- De manera óptima, el sistema enviaría todos los Intent a mi aplicación para su inspección y me permitiría detenerlos o dejarlos pasar, pero estoy bastante seguro de que no es posible (al menos, no para intentos explícitos de iniciar actividades desde un lanzador).
¿Alguien sabe cómo se implementan las aplicaciones de bloqueo de aplicaciones o tiene alguna idea brillante sobre cómo podría hacerse?
Me gustaría mirar en el ciclo de vida. Una vez que la aplicación en cuestión comienza a cargarse, se agregará alguna actividad de ese paquete a la actividad de vanguardia.
Un escaneo de los cambios en las actividades de vanguardia podría hacer el truco.
http://developer.android.com/reference/android/app/Activity.html#ProcessLifecycle