1 votos

¿Forzar periódicamente a aplicaciones de mensajería mal comportadas a despertar?

Estoy ejecutando Android 13 de fábrica con root.

Uso la aplicación LINE Messenger, pero esa aplicación parece comportarse mal en Android. Después de que la aplicación ha estado inactiva por un tiempo, no responde a los mensajes entrantes hasta que el cliente de LINE se lance explícitamente y se traiga al primer plano. Esto significa que a menudo me pierdo los mensajes entrantes hasta mucho más tarde de cuando se enviaron originalmente. No tengo este problema con ninguna otra aplicación de mensajería.

Estoy tratando de encontrar una forma de despertar la aplicación LINE periódicamente, y se me ocurrió la siguiente posibilidad ... pero no funciona:

/system/bin/su -c /system/bin/am set-inactive jp.naver.line.android false

El comando siempre devuelve este error:

cmd: Error al llamar al servicio de actividad: Transacción fallida (2147483646)

Recibo el mismo error sin el /system/bin/su -c

¿Quizás hay alguna otra forma en Android 13 de lograr esto?

PD: Para ser claro, con "despertar", no me refiero a que la aplicación LINE se lance visible. Lo que quiero es que LINE responda correctamente a los mensajes entrantes, incluso cuando esa aplicación no está abierta en la pantalla. Así es como se comportan otras aplicaciones de mensajería, y considero que LINE se comporta "mal", porque LINE no responde a los mensajes entrantes si no ha estado visible en la pantalla durante un tiempo.

También para ser claro, siempre tengo LINE en ejecución con el comportamiento de batería "Sin restricciones" (en lugar de las otras dos opciones, "Optimizado" o "Restringido"), pero aún así no responde a los mensajes entrantes si no ha estado abierto en la pantalla por un tiempo.

¿Hay alguna forma de hacer que /system/bin/am set-inactive ... funcione correctamente? Si es así, ejecutar periódicamente este comando para LINE podría hacer que LINE se dé cuenta de los mensajes entrantes cada vez que se ejecute el comando, incluso cuando LINE no está abierto en la pantalla.

¿O tal vez hay una alternativa a /system/bin/am que logrará lo que deseo?

2voto

Avanst Puntos 513

Bueno, resulta que descubrí cómo hacer que esto funcione después de todo!

Anteriormente, escribí la respuesta original aquí y luego la modifiqué un poco más tarde para decir que en realidad no funcionaba, porque el comando am set-inactive jp.naver.line.android false que estoy usando hacía que mi dispositivo nunca se durmiera.

Pero más tarde me di cuenta de que este comando am set-inactive ... solo desactivaba el sueño del dispositivo porque también ejecutaba AutoInput Unlock Screen en mi tarea de inicio de dispositivo en Tasker instantáneamente después de que se invocaba este comando am..., y esto hacía que interactuaran de manera deficiente y evitaran que mi dispositivo volviera a dormir nunca más.

Una vez configuré el comando AutoInput Unlock Screen para ejecutarse muchos segundos antes que el comando am ... en ese script de inicio de dispositivo Tasker, mi dispositivo volvió a poder dormirse correctamente, y LINE Messenger ahora funciona correctamente.

Así es exactamente como lo hice:

(1) Creé una tarea de Tasker llamada LineForceActive que ejecuta este comando a través de Código=>Ejecutar Shell, utilizando la opción Usar Root ...

/system/bin/am set-inactive jp.naver.line.android.false 0/dev/null 2>&1

Las redirecciones de /dev/null son necesarias, porque el comando "am" falla a menos que se ejecute con stdin, stdout y stderr apuntando a /dev/tty o /dev/null.

(2) Creé una tarea de Tasker Código=>Ejecutar Shell llamada LineRenice que verifica si LINE Messenger está en ejecución, y si es así, ejecuta renice en él para establecerlo en la máxima prioridad posible (prioridad -20). Esta es la tarea de Tasker LineRenice ...

Tarea: LineRenice
Ajustes: Ejecutar Ambos Juntos

A1: Ejecutar Shell [
     Comando: /system/bin/pgrep line
     Tiempo de espera (segundos): 1
     Usar Root: Activado
     Almacenar salida en: %XXOUT
     Usar Espacio de nombres Global: Activado
     Continuar tarea después del error: Activado ]

A2: Establecer Variable [
     Nombre: %XXEXIT
     A: %err
     Realizar cálculos matemáticos: Activado
     Máximo de dígitos redondeados: 3
     Estructura de salida (JSON, etc): Activado
     Continuar tarea después del error: Activado ]

A3: Detener [ ]
    Si  [ %XXEXIT != 0 ]

A4: Ejecutar Shell [
 Comando: /system/bin/renice -p -n -20 %XXOUT
 Tiempo de espera (segundos): 1
 Usar Root: Activado
 Usar Espacio de nombres Global: Activado ]

No estoy seguro si hacer renice para establecer LINE Messenger en una prioridad muy alta es realmente necesario, pero no parece hacer daño. Decidiré más adelante si quiero dejar de usar por completo LineRenice.

(3) Cerca del final de mi script de inicio de dispositivo de Tasker, hago lo siguiente. Lanzo LINE Messenger, espero un momento, y luego ejecuto las tareas de Tasker LineRenice y LineForceActive ...

Lanzar Aplicación [
Nombre de Paquete/Aplicación: LINE
Excluir de Aplicaciones Recientes: Activado
Siempre Iniciar Nueva Copia: Activado
Continuar tarea después del error: Activado ]

Esperar [
MS: 0
Segundos: 3
Minutos: 0
Horas: 0
Días: 0 ]

Realizar Tarea [
Nombre: LineRenice
Prioridad: 0
Estructura de salida (JSON, etc): Activado
Continuar tarea después del error: Activado ]

Realizar Tarea [
Nombre: LineForceActive
Prioridad: 0
Estructura de salida (JSON, etc): Activado ]

(4) Configuré un perfil de Tasker que utiliza el monitor de logcat de Tasker para detectar cuándo LINE Messenger ha sido cerrado forzosamente. En este caso, hago que se invoque el mismo código que está en el ítem 3. Esto reinicia LINE Messenger.

(5) También configuré un perfil de Tasker para ejecutar las tareas LineRenice y LineForceActive cada 2 minutos. Esto podría no ser realmente necesario, y decidiré más adelante si realmente quiero seguir ejecutando estas llamadas repetidas.

Ejecutar Tasker y AutoInput en un dispositivo con root es por supuesto necesario para que todo esto funcione. Una de las razones principales por las que siempre quiero hacer root a mis dispositivos Android y usar Tasker y sus complementos es para permitirme instalar este tipo de arreglos y modificaciones.

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