3 votos

¿Hay alguna manera de evitar que el botón de retroceso vaya a la pantalla de inicio?

Uno de los aspectos que más detesto de Android es el botón de retroceso. Es bastante impredecible lo que va a hacer.

Dependiendo de dónde se encuentre, puede hacer una de estas tres cosas:

  1. llevar al usuario a una página superior en la misma aplicación
  2. llevar al usuario a una aplicación anterior
  3. llevar al usuario de vuelta a la pantalla de inicio

Normalmente, creo que los escenarios 1 y 2 suelen funcionar bastante bien. Aunque no esté seguro de adónde va a ir, el 90% de las veces me llevará a donde quiero ir.

El último escenario es muy frustrante y ocurre exclusivamente cuando no me he dado cuenta de que ya estaba en la primera página de mi aplicación. Me deja en la pantalla de inicio y tengo que averiguar cómo abrir la aplicación de nuevo. En lo que a mí respecta, no veo ninguna razón de peso para llevar al usuario a la pantalla de inicio cuando pulsa la pantalla de retroceso, sobre todo porque hay un botón de inicio justo al lado del botón de retroceso para ese fin.

En fin, quiero una solución a esto. Así que hay algún tipo de aplicación o alguna forma de programar Tasker u otra aplicación de automatización para

  1. anular y cancelar la acción del botón Atrás si me lleva a la pantalla de inicio. Que no haga nada o que muestre un mensaje
  2. simplemente desactivar el botón de retroceso por completo si al hacer clic en él me lleva a la página de inicio.

Estoy en Lollipop y sin root.

Sin embargo, aunque quiero una solución real para mí, me interesaría saber de cualquier solución que esté rooteado o en otras versiones también.

2voto

Firelord Puntos 161

Bueno, esto sigue siendo (después de invertir tantas horas) una solución a medias (también conocida como parcial). Si quieres un mensaje, tendrás un mensaje :) Necesitamos acceso a root para la solución .

Nota : Probado la solución en Android 4.2.1 pero funciona en 5.0 también.


En este momento, el mensaje será recibido como un Toast y no tiene efecto sobre la tecla Back.

Para el propósito del ejemplo estoy usando Explorador de archivos ES y BetterBatteryStats para mostrar un mensaje en su pantalla por defecto.

  1. Enciende el fuego Tasker y habilitarlo.

  2. Ir a VARS y crear una variable como +%Catch (puedes utilizar un nombre diferente pero manteniendo la primera letra en mayúscula (variable global)). Del mismo modo, crea otra con el nombre %Any .

  3. Cree un perfil con contexto de aplicación y seleccione Explorador de archivos ES .

  4. Crear una tarea bajo el perfil anterior y luego una acción dentro de esta tarea como +Code→ Run Shell e introduzca estos datos:

    • Comando : dumpsys activity | grep mFocusedActivity | cut -d ' ' -f 6 | cut -d '}' -f 1 -- este comando mostrará la actividad enfocada (la aplicación actual lanzada con su actividad).
    • Consulte Utilizar root .
    • Almacenar la salida en : %Catch .
    • Guarde esta acción.
  5. Crear otro perfil con contexto de aplicación inverso a Explorador de archivos ES .

  6. Crear una tarea bajo el perfil anterior y luego una acción dentro de esta tarea como +Variables → Conjunto de variables e introduzca estos datos:

    • Nombre : %Catch
    • A : The (puedes poner cualquier palabra)

    Este paso asegurará que la variable %Catch no mantiene el valor (proporcionado durante la ejecución del paso 4) después de que el perfil del paso 3 se vuelva inactivo.

  7. Crear un último perfil en Evento → Nueva ventana y elija Full Screen en Tipo de ventana -- Antes tenía tostadas incluso para los diálogos en la actividad principal. La opción de pantalla completa lo evitará.

  8. Crear una tarea bajo el perfil anterior y luego una acción dentro de esta tarea como +Code→ Run Shell e introduzca estos datos:

    • Comando : dumpsys activity | grep mFocusedActivity | cut -d ' ' -f 6 | cut -d '}' -f 1 -- este comando mostrará la actividad enfocada (la aplicación actual lanzada con su actividad).
    • Consulte Utilizar root .
    • Almacenar la salida en : %Any .
    • Guarde esta acción.
  9. Crear otra acción en la misma tarea como +Alerta → Flash e introduzca estos datos:

    • Texto : Don't back Disk :/ -- este es el mensaje que se mostrará en el Brindis. ¡Escoge sabiamente!
    • Pulse + correspondiente a Si e introduzca %Any eq %Catch -- estamos comparando el nombre de la actividad principal de nuestra aplicación seleccionada con cualquier ventana que abra Android. Si coincide, verás el Toast. Ahora puedes ver por qué necesitábamos un perfil adicional de "contexto de aplicación inverso" en el paso 5.
  10. Guarda todo y habilita los tres perfiles.

  11. Tenga en cuenta que tuve que cambiar mi Superusuario de acceso Root de la aplicación Toasts en notificaciones de la barra de estado porque el tercer perfil necesitará acceso Root cada vez que Android lance una ventana. Asegúrate de desactivar las Toasts de tu cliente Superusuario o de cambiarlas a notificaciones de la barra de estado. ¡Para mí fue un flujo invasivo!

  12. De todos modos, el lanzamiento Explorador de archivos ES y ver la magia. La pantalla por defecto de esta aplicación te mostrará un Brindis. Abre cualquier otra actividad y no te molestará. Vuelve a la pantalla principal de la misma y verás el Toast de nuevo.

  13. Puedes tener este comportamiento para múltiples aplicaciones. Sólo tienes que elegir tu aplicación en el perfil que hicimos en el paso 3 y 5. Se supone que se añaden en O contexto como ES File Explorer or BetterBettaryStats y Not BetterBatteryStats or ES File Explorer .

Algunas capturas de pantalla:

(Haga clic en cualquier imagen para ver su variante más grande)

No toast for any other app                     →                 Default screen for BetterBatteryStats                   →

(No hay tostadas para ninguna otra aplicación)                                                (Pantalla por defecto de BetterBatteryStats)

No toast on dialog on same screen                    →                  Dialog closed and toast came back on main screen                   →

(No hay brindis en el diálogo en la misma pantalla)                                      (El diálogo se cierra y la tostada vuelve a la pantalla principal)

Toast on Default screen of ES File Explorer                    →                   No toast on dialog of the same screen                  →

(Brindar en la pantalla por defecto del ES File Explorer)                             (No hay brindis en el diálogo de la misma pantalla)

Toast came back as soon as dialog disappeared

(La tostada volvió en cuanto desapareció el diálogo)


Comentario

  • La solución mencionada no funcionó en mi dispositivo satisfactoriamente si la aplicación se quedó en la lista de recientes (pero al OP no le importa) y se le ocurre abrirla de nuevo.

  • Puede deshacerse de los perfiles basados en el contexto de la aplicación (e inverso) si utiliza una cadena en el paso 9 en lugar de %Catch como com.estrongs.android.pop/.view.FileExplorerActivity (Actividad principal de Explorador de archivos ES ). La solución se reducirá a dos pasos. :D

    Sin embargo, me gustaría que las cosas estuvieran automatizadas aquí, ¡para qué molestarse especialmente cuando quieres seleccionar varias aplicaciones para el brindis!

¿Qué más?

  • Cada dispositivo tiene más o menos un diseño de llave bajo /system/usr/keylayout . En mi dispositivo el diseño genérico se denomina Generic.kl . La clave correspondiente se menciona en

    key 158 BACK    WAKE_DROPPED

    Si pones # frente a ella y reiniciar el dispositivo, entonces la tecla de retroceso se desactivaría. Para permanecer en el lado seguro, lo cambié con la tecla Meny ( key 139 ).

    Este intercambio puede ser muy beneficioso en Tasker. Desafortunadamente, los cambios tienen efecto sólo en el siguiente reinicio, lo que es muy contraproducente para nuestro objetivo. ¡Hágame saber si se puede hacer sin un reinicio!

  • Adiciones de Xposed (requiere Xposed Framework) puede reasignar o desactivar la tecla Atrás y otros pero no tiene actividades explícitamente invocables (relevantes para el objetivo) que puedan ser utilizadas por otras aplicaciones. Además, ni siquiera parece almacenar una base de datos o un archivo de preferencias. Así que no pude usarlo con Tasker para lograr el objetivo.

  • Configuración segura (otro módulo de Xposed) tiene una opción llamada Matar el botón de retroceso pero parece que está disponible para ROMs personalizadas y por lo tanto, no he podido probarlo. Algunos dicen que sí funciona y yo también vi el plugin útil para el objetivo. Compruébalo si tienes una ROM personalizada.

¡Estoy abierto a ideas aquí!

1voto

Firelord Puntos 161

No he podido averiguar la forma de averiguar cuándo una aplicación te deja en la pantalla de inicio si pulsas la tecla Atrás, a menos que hayas lanzado la aplicación desde el App Launcher. Pero, puedo asegurarme de que la tecla Atrás se deshabilite si sólo la aplicación está mostrando su página principal/primera. Necesitamos Tasker y AutoInput para hacer el trabajo. Este último da 7 días de prueba (acceso completo).

Nota: Se requiere acceso a root para el siguiente método .

En primer lugar, tenemos que averiguar el nombre de la actividad principal de su aplicación. Puedes probar con una aplicación como QuickShortcutMaker para mostrar la actividad principal de una aplicación.

(Haga clic en la imagen para ampliarla)

IMG:

El formato es <PKG_NAME>/<MAIN_ACTIVITY_NAME> como com.android.chrome/com.google.android.apps.chrome.MAIN

Como alternativa, puede utilizar adb para hacer el trabajo ( Busybox necesario) a condición de que conocer el nombre del paquete (PKG_NAME) de la aplicación ,

adb shell
dumpsys package PKG\_NAME | grep -A1 "android.intent.action.MAIN:" | awk '{print $2}' | tail -n 1 | tr -d '/'

Ahora que tenemos la actividad principal vamos a proceder hacia Tasker.

Instrucciones para Tasker y AutoInput

  1. Habilitar el servicio de accesibilidad para ambas aplicaciones desde Escenarios → Accesibilidad .

  2. Ir a Tasker → Tareas Tareas y crear una tarea llamada Disable Back Key .

  3. Cree las siguientes acciones dentro de él:

    1. Código → Ejecutar Shell ,

      1. Comando : dumpsys window | grep "mCurrentFocus" | rev | cut -d '/' -f 1 | tr -d '}' | rev

      2. Consulte Utilizar root

      3. Almacenar la salida en : %CurrentFocus

      Simplemente estamos almacenando la actividad que actualmente está en foco.

    2. Tarea → Si ,

      • %CurrentFocus eq MAIN_ACTIVITY_NAME

      Cambiar MAIN_ACTIVITY_NAME con el nombre de la actividad que anotó anteriormente.

    3. Plugin → AutoInput → Modos ,

      1. Configuración :

        1. Supresión de teclas : Activar
        2. Claves : Volver
      2. Tiempo de espera (segundos) : Ninguno
    4. Tarea → Otra → repite el último paso pero cambia Supresión de llaves: Desactivar .

  4. Crear un perfil basado en eventos de Evento → UI → Nueva ventana ,

    1. Tipo de ventana : Pantalla completa
    2. Prioridad : El más alto
  5. Vincular la tarea Disable Back Key en él.

  6. Cambia el nombre del perfil a AutoInput disable Back Key .

  7. Cree una nueva tarea independiente denominada Enable Profile .

  8. Crear la acción 3 del paso 3.

  9. Crear otra acción a partir de Tasker → Estado del perfil :

    • Nombre : elegir AutoInput disable Back Key
    • Establecer : En
  10. Cree una tarea más llamada Disable Profile .

  11. Repita el paso 9 pero cambie Set: Off .

  12. Cree la acción 3 del paso 3 pero cambie Supresión de teclas: Desactivar .

  13. Crear un perfil basado en la aplicación de Aplicación → YOUR_APP,

    1. Añadir Activar el perfil como Introducir tarea
    2. Añadir Desactivar perfil como Tarea de salida
  14. Desactivar AutoInput deshabilita la Tecla Atrás porque no queremos utilizar la CPU todo el tiempo en el procesamiento de este perfil en cada nueva formación de ventanas por parte de Android.

Así es. Inicia la aplicación que seleccionaste antes y verás que la tecla Atrás no funciona cuando se abre la actividad principal de tu aplicación. Ve a cualquier otra actividad de la aplicación, como las preferencias o los ajustes, y la tecla Atrás volverá a funcionar normalmente.


Hay algo de buenas y malas noticias para los propietarios de dispositivos Lollipop no rooteados.

Buenas noticias : Dicho método puede funcionar también sin acceso Root. adb funcionando en modo inalámbrico y conectado en loopback puede hacer el trabajo.

Malas noticias : Hay demasiadas trampas en su uso y no puedo (léase: no tengo tiempo) trabajar para ocuparme de ellas.

Publica una respuesta si te libras de los problemas con adb .

-1voto

Lucky Puntos 122

El tercer escenario es el caso en el que se pulsa el botón de retroceso cuando se está en la pantalla principal de una aplicación. Algunas aplicaciones o juegos confirman la salida de la aplicación con la opción de sí o no algunos no tienen que que le llevará de vuelta al cajón de menú o la pantalla de inicio si se ha puesto en marcha desde la pantalla de inicio o la barra de notificaciones. Así que eso es normal. Si estás en la pantalla de actividad principal de una aplicación esperaría que se mostrara la pantalla de inicio si presiono el botón de retroceso. Eso me parece intuitivo. Y si el botón de retroceso sale de una aplicación sin ninguna confirmación, todavía puedes encontrarla en la pestaña de recientes.

Sin embargo en Lollipop tienes la opción de Screen Pinning disponible en Ajustes-> Seguridad que te permite permanecer en esa app en concreto y el botón de retroceso estará desactivado hasta que desancles la aplicación. Y usted no será capaz de volver a la pantalla de inicio al pulsar el botón de retroceso de esa aplicación. Pero no puedes cambiar de una aplicación a otra sin desanclar la aplicación actual.

Si crees que ya no necesitas las acciones del botón de retroceso por defecto, aquí tienes una aplicación relacionada en PlayStore. Botón de retroceso (sin root) . Puedes desactivar/desactivar el botón de retroceso de la barra virtual o de navegación por completo si quieres usar esta aplicación. El botón de retroceso de la barra flotante funciona bien en Lollipop pero no pude habilitar la barra de navegación ya que no funciona en las versiones de Android 4.4.4 o posteriores.

Screenshot Screenshot_1 Screenshot_2

Captura de pantalla (Haga clic para ampliar)

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X