Modo quiosco en Android
Estoy en el proceso de evaluar si una aplicación empresarial CF .NET se puede portar para ejecutarse en dispositivos Android y cómo hacerlo. La aplicación en los teléfonos con Windows Mobile se ejecuta en modo quiosco, donde la aplicación se inicia automáticamente en modo de pantalla completa después del inicio y los usuarios no pueden acceder accidental o voluntariamente a ninguna otra parte del teléfono.
¿Es posible en Android tener solo una aplicación de inicio automático después del inicio y evitar que los usuarios accedan accidentalmente (o voluntariamente) a otras partes del dispositivo Android?
Puede iniciar automáticamente aplicaciones al arrancar escuchando la android.intent.action.BOOT_COMPLETED
intención en un BroadcastReceiver e iniciar su actividad desde allí. En la Actividad puedes registrarte como la nueva pantalla de inicio predeterminada[1] y manejar las claves.
Creo que hay algunos casos que no se pueden manejar sin modificar el marco (como presionar prolongadamente Inicio para mostrar las aplicaciones actualmente activas). Sin embargo, también podría estar equivocado.
Pero para un prototipo eso podría ser suficiente.
¡Diviértete jugando!
[1]:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
En la nueva vista previa de Android L, Google anunció el bloqueo de tareas , que hace exactamente eso. Sin embargo, parece necesitar root.
L Developer Preview presenta una nueva API de bloqueo de tareas que le permite restringir temporalmente que los usuarios abandonen su aplicación o sean interrumpidos por notificaciones. Esto podría usarse, por ejemplo, si está desarrollando una aplicación educativa para admitir requisitos de evaluación de alto riesgo en Android. Una vez que su aplicación active este modo, los usuarios no podrán ver notificaciones, acceder a otras aplicaciones ni regresar a la pantalla de inicio hasta que su aplicación salga del modo.
Para evitar el uso no autorizado, solo las aplicaciones autorizadas pueden activar el bloqueo de tareas. Además, la autorización de bloqueo de tareas debe ser otorgada por una aplicación del propietario del dispositivo especialmente configurada, a través del
android.app.admin.DevicePolicyManager.setLockTaskComponents()
método.Para configurar un propietario de dispositivo, siga estos pasos:
- Conecte un dispositivo que ejecute una
userdebug
compilación de Android a su máquina de desarrollo.- Instale la aplicación de propietario de su dispositivo.
- Cree un
device_owner.xml
archivo y guárdelo en el/data/system
directorio del dispositivo.
$ adb root
$ adb shell stop
$ rm /tmp/device_owner.xml
$ echo "<?xml version='1.0' encoding='utf-8' standalone='yes' ?>" >> /tmp/device_owner.xml
$ echo "&device-owner package=\"<your_device_owner_package>\" name=\"*<your_organization_name>\" />" >> /tmp/device_owner.xml
$ adb push /tmp/device_owner.xml /data/system/device_owner.xml
$ adb reboot
Antes de usar la API de bloqueo de tareas en su aplicación, verifique que su actividad esté autorizada llamando a DevicePolicyManager.isLockTaskPermitted().
Para activar el bloqueo de tareas, llame
android.app.Activity.startLockTask()
desde su actividad autorizada.Cuando el bloqueo de tareas está activo, el siguiente comportamiento surte efecto:
- La barra de estado está en blanco y las notificaciones de usuario y la información de estado están ocultas.
- Los botones Inicio y Aplicaciones recientes están ocultos.
- Es posible que otras aplicaciones no inicien nuevas actividades.
- La aplicación actual puede iniciar nuevas actividades, siempre que al hacerlo no se creen nuevas tareas.
- El usuario permanece bloqueado en su aplicación hasta que lo llame una actividad autorizada
Activity.stopLockTask()
.
Puede personalizar esto (deshabilitar el acceso al menú, limitar la adición de aplicaciones, etc.) para habilitar el quiosco. http://code.google.com/p/android-launcher-plus/
Después de buscar esto por un tiempo, encontré una buena solución. Sin embargo, esto solo funciona en dispositivos rooteados, pero supongo que si es solo para esta aplicación, rootearla no debería ser un problema.
Haga de su aplicación el iniciador agregando
<category android:name="android.intent.category.HOME" />
a tu filtro de intención
Asegúrese de que su aplicación contraiga la barra de herramientas para que no pueda acceder a la barra de notificaciones. Consulte ¿ Cómo deshabilitar la barra de estado/barra de notificaciones en Android mediante programación? o http://blog.vogella.com/2011/02/28/android-hidding-the-status-and-title-bar/
Luego, para evitar que otros programas se abran por error, use un Servicio de accesibilidad para verificar si el estado de la ventana ha cambiado, compare el paquete con una lista blanca o negra y use ActivityManager.killBackgroundProcesses para eliminarlo si no debería ejecutarse.
Consulte también http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ para conocer otra forma.