Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Modo de quiosco en Android

Estoy en el proceso de evaluar si y cómo una aplicación empresarial de CF .NET puede ser portada para ejecutarse en dispositivos Android. La aplicación en los teléfonos Windows Mobile se ejecutan en modo quiosco, donde la aplicación se inicia automáticamente en modo de pantalla completa después de arrancar y con los usuarios que no pueden acceder de forma accidental o voluntaria a ninguna otra parte del teléfono.

¿Es posible en Android tener sólo una aplicación autostart después de arrancar y evitar que los usuarios de manera accidental (o de buena gana) acceder a cualquier otra parte del dispositivo Android?

9 Solutions collect form web for “Modo de quiosco en Android”

Puede iniciar automáticamente las aplicaciones al iniciar escuchando la intención de android.intent.action.BOOT_COMPLETED en un BroadcastReceiver e iniciar su actividad desde allí. En la actividad puede registrarse como la nueva pantalla predeterminada [1] y manejar las claves.

Creo que hay algunos casos que no se puede manejar sin modificar el marco (como longpress en Inicio para mostrar aplicaciones actualmente activas) – Yo también podría estar equivocado sin embargo.

Pero para un prototipo que podría ser suficiente.

¡Diviértete jugueteando!

[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> 

Podría 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/

En la nueva Android L Preview, Google ha anunciado Task Locking , que hace exactamente eso. Sin embargo, parece que necesita raíz.

La L Developer Preview introduce una nueva API de bloqueo de tareas que le permite restringir temporalmente los usuarios de salir de su aplicación o ser interrumpido por las notificaciones. Esto podría utilizarse, por ejemplo, si está desarrollando una aplicación de educación para respaldar los requisitos de evaluación de apuestas de alto nivel en Android. Una vez que tu aplicación active este modo, los usuarios no podrán ver las notificaciones, acceder a otras aplicaciones o volver a la pantalla de inicio hasta que la aplicación salga del modo.

Para evitar el uso no autorizado, sólo 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 método android.app.admin.DevicePolicyManager.setLockTaskComponents() .

Para configurar un propietario de dispositivo, siga estos pasos:

  • Conecte un dispositivo que ejecute una compilación userdebug Android a su máquina de desarrollo.
  • Instala la aplicación del propietario del dispositivo.
  • Cree un archivo device_owner.xml y guárdelo en el directorio /data/system 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, compruebe que su actividad está autorizada llamando a DevicePolicyManager.isLockTaskPermitted ().

Para activar el bloqueo de tareas, llame a android.app.Activity.startLockTask() de su actividad autorizada.

Cuando el bloqueo de tareas está activo, el siguiente comportamiento tiene 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 hacerlo no cree nuevas tareas.
  • El usuario permanece bloqueado en su aplicación hasta que una actividad autorizada llame a Activity.stopLockTask() .

Después de buscar esto por un tiempo he llegado con una buena solución. Esto sólo funciona en dispositivos con raíz, sin embargo, pero supongo que si es sólo para esta aplicación, a continuación, enraizamiento no debería ser un problema.

  • Haga que su aplicación sea el lanzador agregando

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

    A su filtro de intenciones

  • Asegúrate de que la aplicación colapsa la barra de herramientas para que no puedas acceder a la barra de notificación. ¿Cómo deshabilitar la barra de estado / barra de notificación en android mediante programación? O http://blog.vogella.com/2011/02/28/android-hidding-the-status-and-title-bar/

  • A continuación, para evitar que otros programas se abran por error, utilice un Servicio de accesibilidad para comprobar si se ha cambiado el estado de la ventana, compare el paquete con una lista blanca o negra y utilice ActivityManager.killBackgroundProcesses para eliminarlo si no se ejecuta.

También compruebe http://thebitplague.wordpress.com/2013/04/05/kiosk-mode-on-the-nexus-7/ para otra manera

Configurar Dispositivos de Propósito Único La página del desarrollador android ha descrito estas cosas que usted puede fácilmente llegar a conocer más cosas de allí.

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

Inicio de la aplicación en el arranque

La MEJOR manera de lograr esto es configurar la aplicación como el lanzador

 <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> 

Cómo bloquear 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 el propietario del dispositivo. Nota: su dispositivo debe estar desprovisto: si lo ha registrado debe realizar 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 provisto, puede iniciar el siguiente comando desde adb ( no se requiere root )

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

Para evitar android pidiendo a los usuarios permisos para fijar 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(); } 

Encontré otra técnica posible en este post del foro . Citando ese post:

http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/10839-android-kiosk-mode-tutorial.html

Utilizando los métodos siguientes, puede crear una aplicación que evite que los usuarios "regulares" jueguen con otra cosa que no sea su aplicación.

La aplicación está formada por dos módulos. La actividad principal y un servicio. El servicio está configurado para iniciarse al arrancar. Cuando se inicia el servicio, comprueba si la actividad se está ejecutando o no. Si no se está ejecutando, utiliza un temporizador para iniciar la actividad principal.

Cuando la actividad está en pausa, programa el servicio para que se inicie en un segundo: Código:

 Sub Activity_Pause (UserClosed As Boolean) If kiosk Then StartServiceAt(KioskService, DateTime.Now + 1 * DateTime.TicksPerSecond, false) End Sub 

Si el usuario presiona la pantalla de inicio, la pantalla de inicio aparecerá durante varios segundos. Sin embargo, su aplicación volverá al frente después de unos segundos y el usuario no podrá interactuar con ninguna otra aplicación ni cambiar la configuración.

El servicio está configurado para ser un servicio de primer plano. Esto evita que Android mate nuestro servicio. Pulse el botón Stop para desactivar el modo quiosco.

Parece que hay un ejemplo de código en modo quiosco archivo ZIP disponible para descargar , también.

Xposed marco puede hacer esto. Necesita raíz y existe la posibilidad de que no funcione en todas y cada una de las plataformas. Busque el método disable () en la clase android.app.StatusBarManager .

Aquí en el código fuente de Android

Mira aquí cómo escribir tu propio módulo: Xposed development tutorial

Es mucho más fácil de lo que piensas a primera vista. ¡Buena suerte!

Junto con la configuración de su aplicación con un receptor BOOT, y esta respuesta para evitar la expansión de la barra de estado, esta solución funciona en 4.4 y superior como una aplicación de quiosco completa:

Coloque en su onCreate ():

  final View view = (View) findViewById(android.R.id.content); if (view != null) { //"hides" back, home and return button on screen. view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN); view.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { // Note that system bars will only be "visible" if none of the // LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set. if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN); } } }); } 

Esto ocultará completamente el botón de retroceso, las aplicaciones y el botón de inicio.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.