1 votes

Périodiquement forcer une application de messagerie mal comportée à se réveiller?

Je suis sous Android 13 rooté en version stock.

J'utilise l'application LINE Messenger, mais cette application semble mal se comporter sous Android. Après que l'application soit restée inactive pendant un certain temps, elle ne répond plus aux messages entrants tant que le client LINE n'est pas explicitement lancé et ramené à l'avant-plan. Cela signifie que je rate souvent les messages entrants jusqu'à bien plus tard que leur heure d'envoi initiale. Je n'ai pas ce problème avec d'autres applications de messagerie.

J'essaie de trouver un moyen de réveiller périodiquement l'application LINE, et j'ai pensé à la possibilité suivante ... mais ça ne fonctionne pas :

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

La commande renvoie toujours cette erreur :

cmd: Failure calling service activity: Failed transaction (2147483646)

J'ai la même erreur sans le /system/bin/su -c

Y a-t-il peut-être une autre manière sous Android 13 d'accomplir ceci?

PS : Pour être clair, par "réveiller", je ne veux pas dire que l'application LINE doit être lancée visiblement. Ce que je veux, c'est que LINE réponde correctement aux messages entrants, même lorsque l'application n'est pas ouverte à l'écran. C'est ainsi que se comportent les autres applications de messagerie, et je considère que LINE se comporte mal, car LINE ne répond pas aux messages entrants s'il n'a pas été ouvert à l'écran pendant un certain temps.

Aussi pour être clair, j'ai toujours LINE en cours d'exécution avec un comportement de batterie "Non restreint" (par opposition aux deux autres choix, "Optimisé" ou "Restreint"), mais il ne répond toujours pas aux messages entrants s'il n'a pas été ouvert à l'écran pendant un certain temps.

Y a-t-il un moyen de forcer /system/bin/am set-inactive ... à fonctionner correctement? Si c'est le cas, exécuter périodiquement cette commande pour LINE pourrait amener LINE à prendre conscience des messages entrants à chaque fois que la commande s'exécute, même lorsque LINE n'est pas ouvert à l'écran.

Ou peut-être existe-t-il une alternative à /system/bin/am qui accomplira ce que je désire?

0 votes

Je ne sais pas comment Line fonctionne, mais la plupart des applications de messagerie utilisent pour recevoir des messages des notifications push Google Firebase, donc le retard pourrait également être causé par Google Play Services. Quels sont les paramètres de batterie de Line? Notez que de nombreux fabricants modifient Android TK pour économiser encore plus d'énergie, ce qui a pour effet secondaire de réveiller les applications trop tard.

0 votes

Eh bien, toutes les autres applications de messagerie que j'utilise n'ont pas ce problème, donc je ne pense pas que cela soit lié aux Services Play. Mon système d'exploitation n'offre même pas les paramètres d'"optimisation de la batterie", donc cela ne peut pas être modifié sur une base d'"application". C'est "OS 2.0.3" pour l'appareil Nothing 2. J'ai aussi pensé que "am set-inactive ... false" aurait un impact sur le comportement de l'application Firebase Push. De plus, si je me souviens bien, LINE avait le même problème sur mon ancien Pixel 5, même lorsque j'avais désactivé l'"optimisation de la batterie" pour cette application. C'est pourquoi je dis que LINE se comporte "mal". Y a-t-il un moyen de forcer une application comme LINE à "se réveiller" ?

0 votes

Si par "réveiller" vous entendez "lancer l'application", vous pouvez essayer l'automatisation avec Tasker etc.

2voto

Avanst Points 513

Eh bien, il s'avère que j'ai trouvé comment faire fonctionner cela, après tout!

Auparavant, j'avais écrit la "Réponse" originale ici puis je l'avais modifiée un peu plus tard pour dire que cela ne fonctionnait pas vraiment, car la commande am set-inactive jp.naver.line.android false que j'utilisais empêchait mon appareil de se mettre en veille.

Mais plus tard, j'ai réalisé que cette commande am set-inactive ... ne désactivait la mise en veille de l'appareil que parce que j'avais également exécuté AutoInput Unlock Screen dans ma tâche de démarrage de l'appareil Tasker instantanément après que cette commande am ... a été invoquée, et que cela les faisait interagir de manière défavorable et empêchait mon appareil de se mettre jamais en veille à nouveau.

Une fois que j'ai configuré la commande AutoInput Unlock Screen pour s'exécuter plusieurs secondes plus tôt que la commande am ... dans ce script de démarrage d'appareil Tasker, mon appareil a de nouveau pu se mettre correctement en veille, et LINE Messenger fonctionne maintenant correctement.

Voici exactement comment j'ai fait:

(1) J'ai créé une tâche Tasker appelée LineForceActive qui exécute cette commande via Code=>Run Shell, en utilisant l'option Use Root ...

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

Les redirections de /dev/null sont nécessaires, car la commande "am" échoue sauf si elle fonctionne avec stdin, stdout et stderr pointant vers soit /dev/tty soit /dev/null.

(2) J'ai créé une tâche Code=>Run Shell de Tasker appelée LineRenice qui vérifie si LINE Messenger est en cours d'exécution, et si c'est le cas, elle exécute renice sur celui-ci pour le définir sur la plus haute priorité possible (priorité -20). Il s'agit de la tâche LineRenice de Tasker ...

Tâche : LineRenice
Paramètres : Exécuter ensemble

A1: Exécuter Shell [
     Commande : /system/bin/pgrep line
     Durée d'attente (secondes) : 1
     Utiliser le root : Activé
     Stocker la sortie dans : %XXOUT
     Utiliser l'espace de noms mondial : Activé
     Continuer la tâche après une erreur : Activé ]

A2: Réglage de la variable [
     Nom : %XXEXIT
     À : %err
     Faire des maths : Activé
     Décimales maximum : 3
     Structure de sortie (JSON, etc) : Activé
     Continuer la tâche après une erreur : Activé ]

A3: Arrêt [ ]
    Si  [ %XXEXIT != 0 ]

A4: Exécuter Shell [
 Commande : /system/bin/renice -p -n -20 %XXOUT
 Durée d'attente (secondes) : 1
 Utiliser le root : Activé
 Utiliser l'espace de noms mondial : Activé ]

Je ne suis pas sûr que faire un renice pour définir LINE Messenger sur une priorité très élevée soit vraiment nécessaire, mais cela ne semble pas nuire. Je déciderai plus tard si je veux continuer à utiliser LineRenice ou non.

(3) Près de la fin de mon script de démarrage d'appareil Tasker, je fais ce qui suit. Il lance LINE Messenger, attend un court instant, puis lance les tâches Tasker LineRenice et LineForceActive ...

Lancer l'application [
Nom du package/application : LINE
Exclure des applications récentes : Activé
Démarrer toujours une nouvelle copie : Activé
Continuer la tâche après une erreur : Activé ]

Attendre [
MS: 0
Secondes : 3
Minutes : 0
Heures : 0
Jours : 0 ]

Exécuter la tâche [
Nom : LineRenice
Priorité : 0
Structure de sortie (JSON, etc) : Activé
Continuer la tâche après une erreur : Activé ]

Exécuter la tâche [
Nom : LineForceActive
Priorité : 0
Structure de sortie (JSON, etc) : Activé ]

(4) J'ai configuré un profil Tasker qui utilise le moniteur logcat de Tasker pour détecter lorsque LINE Messenger a été fermé de force. Dans ce cas, je fais invoquer le même code que celui de l'élément 3. Cela redémarre LINE Messenger.

(5) J'ai également configuré un profil Tasker pour exécuter les tâches LineRenice et LineForceActive toutes les 2 minutes. Cela pourrait ne pas être réellement nécessaire, et je déciderai plus tard si je veux vraiment continuer à exécuter ces appels répétés.

Il est bien sûr nécessaire de faire fonctionner Tasker et AutoInput sur un appareil rooté pour que tout cela fonctionne. L'une des principales raisons pour lesquelles je veux toujours rooter mes appareils Android et utiliser Tasker et ses plugins est de me permettre d'installer ce type de correctifs et de modifications.

0 votes

Depuis que j'ai installé et posté ma réponse, il y a eu deux mises à jour de LINE Messenger dans le Play Store, et je les ai installées toutes les deux. J'ai ensuite décidé de tester en désactivant mes tâches Tasker LineRenice et LineForceActive, et maintenant il semble que LINE Messenger fonctionne correctement par lui-même !! Mais il semble que LINE Messenger cesse toujours de répondre aux messages après avoir été forcé à se fermer, donc maintenant, je ne fais que l'élément 4 de ma réponse (mais sans LineRenice et LineForceActive), et cela semble être tout ce dont j'ai besoin. J'espère que ce comportement continue, et je le signalerai.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X