Modo quiosco en Android

8 minutos de lectura

Modo quiosco en Android
erik h

Estoy en el proceso de evaluar si una aplicación empresarial CF .NET se puede portar para ejecutarse en dispositivos Android y cómo. 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 arranque y los usuarios no pueden acceder accidentalmente o voluntariamente a ninguna otra parte del teléfono.

¿Es posible en Android tener solo una aplicación de inicio automático después de arrancar y evitar que los usuarios accedan accidentalmente (o voluntariamente) a otras partes del dispositivo Android?

  • ¿Resolviste tu problema?

    – Menna-Allah Sami

    18 de febrero de 2015 a las 8:28

  • Sí, es posible. Creé una publicación de blog (muy) larga sobre esto: andreas-schrade.de/2015/02/16/…

    – codificador de funciones

    18 de febrero de 2015 a las 14:39

  • También creé una publicación de blog sobre esto (parcialmente) usando Lollipop; sin embargo, excluye la parte del receptor de arranque: sureshjoshi.com/mobile/android-kiosk-mode-sin-raíz

    – SJoshi

    30 de junio de 2015 a las 1:27

  • Respondí una pregunta similar aquí sobre diferentes métodos para crear dispositivos bloqueados de un solo uso: stackoverflow.com/a/43644803/2888763

    – Trevor Halvorson

    22 mayo 2017 a las 17:35

Puede iniciar automáticamente las aplicaciones en el arranque escuchando el android.intent.action.BOOT_COMPLETED intent en un BroadcastReceiver y comience su actividad desde allí. En la Actividad puedes registrarte como la nueva pantalla de inicio predeterminada[1] y manejar las llaves.

Creo que hay algunos casos que no puede 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>

  • También necesita anular el encendido de la primera actividad; de lo contrario, cuando presione el botón Atrás, irá al iniciador.

    – ademar111190

    19 de junio de 2012 a las 20:17

  • Cómo lograr el cuadro de diálogo del sistema y las barras de notificación deshabilitadas a través del código

    – Gnanam R.

    10 de abril de 2013 a las 4:43

  • @GnanamR: verifique mi respuesta en: stackoverflow.com/questions/11958034/hide-tablet-system-bar

    – Basher51

    2 mayo 2014 a las 9:30

  • @Rinkalkumar Ejecute la aplicación en modo de pantalla completa.

    – Juan61590

    30 de mayo de 2014 a las 5:52

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-lanzador-plus/

  • ¿Podría saber por qué esto fue votado negativo? Escribí mi aplicación de quiosco de Android, actualmente implementada, editando y desarrollando sobre Android Launcher Plus.

    – robot

    10 de diciembre de 2012 a las 22:33


  • En cuyo caso, voto a favor tanto tu respuesta como tu comentario 😉

    – Mawg dice que reincorpore a Monica

    19 de febrero de 2013 a las 8:17

  • @rbot ¿cómo hiciste eso? He estado tratando de crear una aplicación de quiosco durante mucho tiempo y he resuelto casi todo lo demás, excepto asegurarme de que la bandeja de notificaciones no se abra.

    – Wakka02

    11 de julio de 2013 a las 8:05

  • @ Wakka02 Creo que estaba buscando onwindowchanged o algún evento similar (que posiblemente puede indicar la apertura de la bandeja de notificaciones) y cerré la bandeja. Lo hice hace mucho tiempo, así que no recuerdo los detalles.

    – robot

    19 de julio de 2013 a las 16:34

  • @Wakka02: verifique mi respuesta en: stackoverflow.com/questions/11958034/hide-tablet-system-bar

    – Basher51

    2 de mayo de 2014 a las 9:29

En el nuevo Android L Preview, Google ha anunciado 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 a los usuarios para que no 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 de propietario de dispositivo especialmente configurada, a través del
android.app.admin.DevicePolicyManager.setLockTaskComponents() método.

Para configurar un propietario de dispositivo, siga estos pasos:

  • Adjuntar un dispositivo con Android userdebug construir a su máquina de desarrollo.
  • Instala la aplicación de propietario de tu dispositivo.
  • Crear un device_owner.xml archivo y guárdelo en el /data/system directorio en el 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()
de su actividad autorizada.

Cuando el bloqueo de tareas está activo, tiene efecto el siguiente comportamiento:

  • 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 llama una actividad autorizada
    Activity.stopLockTask().

1646758214 53 Modo quiosco en Android
matt_lethargico

Después de buscar esto por un tiempo, se me ocurrió 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 que su aplicación sea el iniciador agregando

    <category android:name="android.intent.category.HOME" /> 
    

    a su intención-filtro

  • Asegúrese de que su aplicación colapse 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-ocultando-el-estado-y-la-barra-de-titulo/

  • Luego, para evitar que otros programas se abran por error, use un Servicio de accesibilidad para verificar si el estado de la ventana cambió, compare el paquete con una lista blanca o negra y use ActivityManager.killBackgroundProcesses para matar si no debería ejecutarse.

también echa un vistazo http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ por otra manera

Iniciando su aplicación en el arranque

la MEJOR manera de lograr esto es configurar su aplicación como iniciador

<activity ...
  android:launchMode="singleInstance"
  android:windowActionBar="false">
    <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>
</activity>

Bloqueando tu aplicación

la forma más confiable es usar un dispositivo con Lollipop o superior y hacer uso de

startLockTask

primero debe configurar su aplicación como propietario del dispositivo. NB: su dispositivo debe estar desaprovisionado: si lo registró, debe hacer un restablecimiento de fábrica y omitir el registro de la cuenta.

para poder registrar su aplicación, primero debe configurar un componente DeviceAdminReceiver:

package com.example.myapp;

public class MyDeviceAdminReceiver extends android.app.admin.DeviceAdminReceiver {
    @Override
    public void onEnabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission received", Toast.LENGTH_SHORT).show();
    }

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) {
        return "are you sure?";
    }

    @Override
    public void onDisabled(Context context, Intent intent) {
        Toast.makeText(context, "Device admin permission revoked", Toast.LENGTH_SHORT).show();
    }


    @Override
    public void onLockTaskModeExiting(Context context, Intent intent) {
        // here you must re-lock your app. make your activity know of this event and make it call startLockTask again!
    }
}

una vez que tenga un dispositivo no aprovisionado, puede ejecutar el siguiente comando desde adb (no se requiere raíz)

adb shell dpm set-device-owner com.example.myapp/.MyDeviceAdminReceiver

para evitar que Android solicite permisos de usuario para anclar su aplicación, debe llamar a setLockTaskPackages

¡finalmente!

@Override
public void onResume(){
    super.onResume();
    DevicePolicyManager mDevicePolicyManager = (DevicePolicyManager) getSystemService(
            Context.DEVICE_POLICY_SERVICE);
    ComponentName mAdminComponentName = new ComponentName(getApplicationContext(), MyDeviceAdminReceiver.class);
    mDevicePolicyManager.setLockTaskPackages(mAdminComponentName, new String[]{getPackageName()});
    startLockTask();
}
@Override
public void finish(){
    stopLockTask();
    super.finish();
}

Google lanzó recientemente el API de administración de Android lo que permite configurar fácilmente el modo quiosco para cualquier dispositivo Android que ejecute Android 5.1 o superior, y también establecer otras políticas.

Modo quiosco en Android
Keyur Lakhani

Configurar la página de dispositivos de un solo propósito del desarrollador de Android ha descrito estas cosas, puede conocer fácilmente más cosas a partir de ahí.

Ahora es fácil de configurar Android 6.0 Marshmallow y versiones posteriores dispositivos como dispositivos corporativos de un solo uso (COSU).

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad