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


Modo de quiosco para android

Tengo una aplicación híbrida escrita en phonegap para tablets android. Ahora quiero que la tableta muestre solamente mi aplicación. Básicamente, quiero que la tableta esté siempre en modo quiosco ejecutando sólo mi aplicación. Así que todos los botones están deshabilitados. He buscado soluciones en línea y una de ellas es usar "surelock", pero no hace todo lo anterior. Otra opción es escribir mi propia ROM, sin embargo no pude encontrar buenos tutoriales sobre eso. ¿Puede alguien ayudarme plz?

  • Enviar notificación a todos los dispositivos conectados a una red Wi-Fi
  • Maneje adecuadamente la animación de DrawerLayout mientras navega a través del fragmento
  • Inhabilitar el movimiento en mapview
  • Diferencias entre las API de REST y JSON
  • Leer datos de la etiqueta NFC (IsoDep)
  • Android: error que incluye / reempaque las dependencias que hacen referencia a las clases principales de javax
  • URL de SMS en Android
  • Añadir diseño con parámetros programáticamente Android
  • ¿Cómo acceder a la carpeta de datos / datos en el dispositivo Android?
  • SQL Android Formulación de consultas con múltiples condiciones
  • El widget de búsqueda en la barra de acción no activa mi actividad de búsqueda
  • Cómo ocultar el teclado virtual de Android en EditText
  • 5 Solutions collect form web for “Modo de quiosco para android”

    Hice un montón de investigación y ahora finalmente estoy satisfecho con lo que tengo.

    Usted tiene básicamente dos opciones:

    1. Crea tu propia ROM personalizada, que no es la mejor solución para mí.

    2. Personalizar las tabletas utilizando varios hacks.

    Así que voy a explicar la segunda opción.

    Primero necesitas enraizar tus dispositivos. Hay varios métodos, pero prefiero el enraizamiento por software oneclick. Para las tabletas chinas puede utilizar VROOT y para los más populares utilizar la raíz Kingo.

    Ahora, que tiene su dispositivo arraigado, podemos deshacernos de la barra superior e inferior.

    private void hideBar(){ try { Process proc = Runtime.getRuntime().exec(new String[]{"su","-c","service call activity 42 s16 com.android.systemui"}); proc.waitFor(); } catch(Exception ex) { Toast.makeText(getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); Log.e("ROOT ERROR", ex.getMessage()); } } 

    Esto hará que la barra superior e inferior desaparezcan. Sin embargo, es probable que necesite una forma de mostrar las barras de nuevo. Para eso puedes usar:

     public void showBars(){ try { String command; command = "LD_LIBRARY_PATH=/vendor/lib:/system/lib am startservice -n com.android.systemui/.SystemUIService"; String[] envp = null; Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); proc.waitFor(); } catch(Exception ex) { Toast.makeText(context.getApplicationContext(), ex.getMessage(), Toast.LENGTH_LONG).show(); } } 

    Ok, así que tenemos que, todo lo que queda es hacer que su aplicación se inicie al arrancar. Para eso puedes encontrar muchos tutoriales, sólo google.

    Con Android L-release (Lollipop) hay una característica llamada pinning que es prácticamente el equivalente al modo Kiosk. Aquí hay un enlace que explica cómo configurarlo.

    Creo que Apple presentó esto primero en iOS. A pesar de que el OP no ha preguntado, también estoy proporcionando los detalles para iOS:

    Android: http://www.cnet.com/how-to/ho-to-pin-apps-in-android-5-lollipop/

    IOS: http://www.webascender.com/Blog/ID/447/How-to-Setup-Kiosk-Mode-Lock-Your-iPad-to-Just-One-App#.VzrO2ZN95E5

    Creo que hay una solución alternativa sin enraizar el dispositivo. Mi jefe me pidió que evitar el enraizamiento, por lo que después de algunas investigaciones llegué a esta solución. En consecuencia, no se hicieron hacks, las claves del sistema todavía permanecen, pero el usuario no puede salir de la aplicación y lanzar otra. Así que hice los siguientes pasos.

    1. Al editar el manifiesto, establezca el tema de pantalla completa sin TitleBar y ActionBar para la Activity apropiada, como esto:

     <application ... android:theme="android:Theme.Holo.NoActionBar.Fullscreen" > 

    2. Desactivado el botón de retroceso sobreescribiendo el método de la clase de Activity :

     @Override public void onBackPressed() { return; } 

    3. Agregue las siguientes cadenas al manifiesto (filtro de intenciones de la Activity apropiada):

     <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 

    Ahora puede reemplazar la pantalla principal predeterminada con su aplicación. Pero la capacidad de salir de la aplicación sigue siendo, haciendo clic en el botón "apps recientes" y elegir otro.

    4. Para evitar todas las otras formas de salir de la aplicación agregué un servicio, que se inicia cada vez que la actividad se detiene. Este servicio relanza la aplicación y envía una notificación al respecto. Código de servicio:

     public class RelaunchService extends Service { private Notification mNotification; private Timer mTimer; public RelaunchService() { } @Override public void onCreate(){ super.onCreate(); if (mNotification == null) { Context context = getApplicationContext(); Intent notificationIntent = new Intent(this, FullscreenActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); Notification.Builder mBuilder = new Notification.Builder(context) .setSmallIcon(android.R.drawable.ic_dialog_info) .setWhen(System.currentTimeMillis()) .setContentIntent(contentIntent) .setContentTitle("Your app title") .setContentText("App is being relaunched"); mNotification = mBuilder.getNotification(); mTimer = new Timer("LaunchTimer"); } } @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); startForeground(1, mNotification); mTimer.schedule(new TimerTask() { @Override public void run() { Intent intent = new Intent(RelaunchService.this, YourActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }, 300); return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); stopForeground(true); mTimer.cancel(); } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. throw new UnsupportedOperationException("Not yet implemented"); } } 

    Código añadido a la clase de actividad:

     @Override protected void onResume() { super.onResume(); exitAllowed = false; Intent servIntent = new Intent(this, RelaunchService.class); stopService(servIntent); } @Override protected void onPause() { super.onPause(); savePersistentData(); if (!exitAllowed) { Intent servIntent = new Intent(this, RelaunchService.class); startService(servIntent); } } 

    La variable booleana exitAllowed debe asignarse a true cuando desee cerrar la aplicación. Puede considerar alguna forma de hacerlo, por ejemplo haciendo clic en el botón "Salir". En mi caso, la contraseña es necesaria para salir.

    Solución no enraizada es posible en el teléfono Samsung, echa un vistazo a la aplicación gratuita de Superlock

    https://play.google.com/store/apps/details?id=com.superkiosk.ospolice.superlocklite&hl=es

    No es necesario crear una ROM personalizada o incluso root dispositivos para obtener el modo quiosco. Por lo general, se recomienda encarecidamente que no los dispositivos de raíz que estarán en el campo, especialmente si sus aplicaciones tendrán datos confidenciales.

    12oz La respuesta del ratón ( https://stackoverflow.com/a/29560438/2888763 ) puede funcionar en la mayoría de los casos, pero no es completamente seguro. Su aplicación o servicio siempre puede ser destruido por el sistema o bloqueo, dando al usuario acceso completo al dispositivo.

    Una manera de lograr el modo de quiosco es usar el modo de bloqueo de Google, que es diferente a la captura de pantalla ( https://developer.android.com/work/cosu.html ). El enlace incluye algunas de las características del modo de bloqueo de tareas como: tener una aplicación fijada a la pantalla de inicio e inhabilitar / ocultar los botones Inicio y Recentes. El enlace también muestra por qué el mayor problema con la solución de Google es la complejidad de configurarlo. Tienes que "Usar una solución de gestión de movilidad empresarial (EMM) de terceros" o "Crear tu propia aplicación DPC". La solución COSU de Google también puede no funcionar si no tiene acceso a Google Play Services.

    Otra opción es utilizar una plataforma de despliegue móvil como Mason ( https://bymason.com/ ) donde puede crear un sistema operativo Android personalizado en pocos minutos con funciones como modo quiosco. A continuación, puede implementar las actualizaciones del sistema operativo o de la aplicación de forma remota en todos sus dispositivos.

    Siéntase libre de hacer ping a mí directamente: trevor @ bymason.com

    EXONERACIÓN DE RESPONSABILIDAD: Trabajo para Mason

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