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?

  • ¿Cómo mantenerse conectado a un servicio de Android entre múltiples actividades?
  • SDK Ubicación no encontrada Android Studio + Gradle
  • Cómo cambiar el color de acción de ActionBar con AppCompat
  • ¿Cómo puedo configurar el estado seleccionado de un botón de imagen con xml
  • Error: No se puede adjuntar archivo vacío en la aplicación GMAIL usando el proveedor de archivos
  • Señal fatal 11 (SIGSEGV) código = 2 en genymotion emulador no utilizando NDK
  • Android SDK equivlent para viewWillAppear (iOS)?
  • Cómo ocultar el teclado virtual en el tacto de una ruleta
  • En la aplicación Unity android, cómo recibir contenido de un servicio de una biblioteca de android con referencia
  • TabHost muestra contenido una vez (onCreate)
  • Posicionamiento de elementos de menú a la izquierda de la barra ActionBar en Honeycomb
  • ¿Cómo puedo abrir el SearchView mediante programación?
  • 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.