0 votes

Comment empêcher la mise à jour des notifications d'une application lorsque l'écran est éteint ?

J'ai un bootleggers ROM (Android 9 pie) installé sur un téléphone Motorola Moto E 2015. J'ai un paramètre, activé dans les paramètres d'affichage adaptatif, qui fait que l'écran s'allume, lorsqu'une nouvelle notification est reçue. C'est une bonne fonctionnalité, mais mon lecteur de musique (AIMP) met à jour sa notification chaque fois qu'une nouvelle chanson commence à être jouée, ce qui fait que l'écran s'allume (pulse) souvent et utilise de la batterie supplémentaire. Je pourrais éviter cela en désactivant complètement les notifications pour AIMP, mais je veux voir la notification lorsque l'écran est allumé.

Est-il possible d'empêcher la mise à jour de la notification lorsque l'écran est éteint ?

Une autre façon de résoudre ce problème serait de désactiver les notifications pour AIMP, lorsque l'écran est éteint, puis de les réactiver lorsque l'écran est allumé (en utilisant tasker, par exemple ). Mais l'inconvénient de cette approche est qu'une fois activée, la notification n'apparaît pas avant la chanson suivante, il n'est donc pas possible de voir la chanson en cours dans la notification de cette façon.

0voto

acejavelin Points 5816

La meilleure façon de procéder est de désactiver les notifications dans les paramètres de votre lecteur multimédia.

L'autre méthode consiste à utiliser les fonctions intégrées d'Android pour désactiver les notifications. Lorsqu'une notification de votre lecteur multimédia s'affiche, abaissez l'écran de notification et appuyez longuement sur la tuile de notification, puis sélectionnez "Arrêter les notifications". Cela désactivera les notifications en retirant à l'application les autorisations nécessaires pour le faire. Pour réactiver les notifications, allez dans Paramètres - Apps et trouvez les apps, puis réactivez les notifications.

Sinon, l'appareil fonctionne exactement comme prévu avec les paramètres que vous avez.

0voto

mnd Points 143

Cette solution n'est peut-être pas la plus sophistiquée, mais j'ai réussi à la mettre en œuvre en utilisant la fonction Automatiser app. Ce n'est pas non plus une solution universelle pour les notifications de toutes les applications, mais cela fonctionne pour contrôler les notifications d'un lecteur de musique (pour AIMP au moins), et c'est ce que je voulais faire.

J'ai utilisé le bloc "Display on" pour vérifier si l'écran est allumé ou éteint. J'ai également ajouté la condition permettant de vérifier si de la musique est en cours de lecture (en utilisant le bloc "Media playing"), de sorte que les notifications ne soient activées et désactivées que lorsque la musique est en cours de lecture. Et pour le basculement des notifications de l'AIMP, j'ai utilisé le bloc "App notifications set state". Enfin, pour que la notification de l'AIMP apparaisse réellement après avoir été activée, j'ai utilisé deux fois le bloc "Audio player control" pour mettre en pause puis relancer immédiatement la musique. De cette façon, la notification s'affiche sans attendre le début de la chanson suivante, et comme les actions de pause et de lecture sont exécutées en séquence sans délai, il n'y a pas de pause audible dans la musique.

Actuellement, la seule chose que je voudrais améliorer est de changer la condition qui vérifie si la musique est en cours de lecture par une condition qui vérifie si l'application du lecteur de musique est lancée et qui ne vérifierait que lorsque l'écran est allumé et éteint. J'espère que cela permettra d'économiser un peu de batterie. Mais je vais devoir voir s'il y a une différence dans la consommation de batterie avec mon flux d'automatisation actuel activé et désactivé. Peut-être que la vérification constante de l'activation et de la désactivation de l'écran n'affecte pas la consommation de la batterie en veille.

Je dois également noter que j'avais obtenu le même résultat en utilisant Tasker et le plugin Secure settings. Mais il semble que cette approche ne soit pas aussi réactive que celle d'Automate. Cela peut être dû au fait que mon téléphone a des spécifications assez basses et qu'il n'y aurait aucune différence sur un appareil plus puissant. Mais d'après ma courte expérience avec Automate, il semble être mieux optimisé pour mon appareil et mon utilisation typique. Probablement parce que Tasker doit utiliser un plugin supplémentaire et qu'Automate intègre les fonctions dont j'ai besoin. Cependant, si quelqu'un est intéressé par la méthode Tasker, je peux modifier la réponse pour l'inclure plus en détail.

Automate flow

0voto

ULTRACOMFY Points 36

Belle question que vous avez là. Pour la résoudre, je vous recommande d'utiliser Automate, ce que, apparemment, vous faites déjà. Vous voulez empêcher votre application musicale de faire clignoter l'écran d'ambiance chaque fois qu'elle envoie une notification, et vous voulez résoudre ce problème avec Automate de la manière la plus efficace possible. Tout d'abord, il est important d'avoir un flux qui ne fonctionne que lorsque votre lecteur multimédia est en cours d'exécution. Comme vous ne pouvez pas définir "Media Player Running ?" comme condition de démarrage de votre flux (vous pouvez créer un autre flux qui attend le démarrage de votre Media Player, mais de toute façon, vous avez toujours un flux en cours d'exécution en permanence), vous pouvez faire une petite solution de contournement : Vous pouvez lancer des flux juste AVEC votre application Media Player en utilisant Automate. Créez un flux qui démarre votre lecteur multimédia ET le flux qui active/désactive les notifications par la suite :

Start Flow

Ce flux, lorsqu'il est lancé, va démarrer le Media Player et un autre flux que je montrerai plus tard. Maintenant : Sur l'écran d'accueil Android par défaut, vous pouvez ajouter des raccourcis. Pour cela, vous pouvez aller dans l'éditeur de diagramme de flux, cliquez sur le bloc Début du flux et ensuite sur "Installer le raccourci de l'écran d'accueil". Lorsque vous choisissez le flux que nous venons de créer, vous pouvez ouvrir le flux et le lecteur multimédia en cliquant sur le bouton de votre nouvel écran d'accueil.

Il reste maintenant à contrôler correctement les notifications pour les empêcher d'apparaître lorsque l'écran est éteint tout en tenant compte de vos souhaits. Automatiser le contrôle CAN pour savoir si une application est en cours d'exécution ou non. En utilisant les flux comme je l'ai décrit ici, nous savons que le lecteur multimédia sera en cours d'exécution. Ce que nous pouvons faire, c'est arrêter le flux lorsqu'il détecte que le lecteur multimédia a été fermé.

Nous voulons empêcher le lecteur multimédia d'afficher des notifications lorsque l'écran est éteint. Donc, ce que nous pouvons faire est d'empêcher le lecteur d'afficher des notifications du tout. Nous avons une condition : Player Update == true | AND | Screen == 'on' (mise à jour du lecteur) Mais, nous sommes intelligents : Nous pouvons simplement attendre la mise à jour du lecteur, et ensuite attendre que l'écran s'allume. C'est la méthode la plus économe en énergie. Nous avons une étape de programmation à chaque fois que la piste change/est mise en pause/est reprise/etc - Nous forçons simplement une notification à chaque fois que la piste change, ou lorsque l'écran est allumé la fois suivante après le dernier changement de piste.

Our Notification Flow

Vous utilisez le bloc "Activer les notifications". Dans mon exemple, j'ai choisi "App OP mode set" parce que j'utilise beaucoup ce bloc pour d'autres choses, mais votre bloc devrait également convenir. NOTE : Désactiver les notifications lorsque l'écran est allumé peut annuler la notification. Si cela s'applique à vous, et que le flux annule immédiatement la notification après que le lecteur multimédia l'ait affichée, vous devez ajouter un bloc qui attend que l'écran soit à nouveau éteint. AUTRE NOTE : le premier "Is Display On" est défini sur "Immediately", tandis que le second est "When changed". Ces deux éléments forment un bloc "Wait until : L'écran soit allumé". Vous pourriez également faire cela en utilisant un bloc "Is Display On" réglé sur immédiatement, où NO est connecté à l'entrée du bloc, créant ainsi une boucle, mais nous ne voulons pas de cela.

Maintenant, pour l'efficacité de la batterie, nous voulons arrêter ce flux lorsque le Media Player est arrêté. Je pensais que ce serait facile, mais en fait ça ne l'est pas. Automate dispose de blocs permettant de voir quelle application est au premier plan, mais ne propose pas directement de blocs pour "Processus en cours d'exécution ?". Il existe deux solutions de contournement évidentes : Les commandes shell. Linux propose la commande "ps" pour afficher les processus en cours d'exécution, et Automate peut exécuter des commandes shell, mais il existe un moyen bien plus simple que cela : Les statistiques d'utilisation d'Android. Android conserve un enregistrement de l'utilisation de chaque application. Nous pouvons nous en servir pour déterminer si l'application est utilisée en ce moment. En effet, si la dernière utilisation remonte à plus de 60 secondes, nous pouvons supposer qu'elle est fermée en ce moment. Nous vérifions donc si l'application est en cours d'exécution en comparant "Dernière utilisation de l'application" à "Heure actuelle", et si ces valeurs sont à peu près les mêmes, l'application EST en cours d'exécution.

Starter Flow, Update

Avec le bloc "App Usage", nous pouvons déterminer le moment où une application a été utilisée, et affecter cette valeur à une variable. Je l'ai appelé "Time". Vous obtenez ce bloc, et choisissez votre Media Player comme paquet d'applications. Les valeurs de l'horodatage peuvent être ignorées. Avec le bloc "Expression True", vous pouvez maintenant comparer cette valeur à l'heure actuelle :

enter image description here

J'ai aussi ajouté un tampon de 5 secondes. Entre le moment où les données d'utilisation de l'application sont récupérées et le moment où ce bloc sera vérifié, il s'écoulera un certain temps, ce qui pourrait conduire à ce qu'il dise toujours que "Last Time Used" est plus petit que "Now". REMARQUE : "Now" est une variable intégrée. Vous n'avez PAS besoin de la remplacer.

Si le résultat est NO (App en cours d'exécution), il attendra 2 minutes avant de poser à nouveau la question. J'ai pensé à un bloc "Media Playing" réglé sur "When Changed", mais cela entrerait en conflit avec le tampon de cinq secondes. Si le résultat est OUI (l'application n'est pas en cours d'exécution), un bloc "Fiber Stop" est créé. Avec ce bloc, vous pouvez arrêter des fibres spécifiques, même dans d'autres flux/scripts. Tout ce que vous avez à faire est d'entrer l'URI que le flux de contrôle de notification possède. Vous pouvez la trouver en allant dans le script du flux de contrôle de notification, en cliquant sur le bloc de début de flux et en faisant défiler jusqu'en bas.

Après tout, vous avez maintenant deux flux : Le premier flux ouvre le lecteur multimédia et le second flux, puis attend que le lecteur multimédia s'arrête et annule ensuite le second flux. Le deuxième flux contrôle la notification des lecteurs multimédias en les désactivant complètement, en attendant un changement de piste, puis en forçant une notification, mais uniquement lorsque l'écran est allumé.

NOTE : Mon lecteur est bizarre (je n'aime pas l'utiliser en général) et ne réagit qu'à Play/Pause. Habituellement, lorsque vous avez un bloc "When Media Playing" réglé sur "When Changed", il réagit aux changements de piste. Avec mon lecteur actuel, ce n'est pas le cas. Si vous rencontrez le même problème, vous pouvez enregistrer le titre de la musique dans une variable et comparer périodiquement ce titre au titre de la piste en cours. J'espère ne pas avoir à en arriver là. Bonne chance !

0voto

ULTRACOMFY Points 36

J'ai lu les commentaires de l'autre réponse qui a été postée et je peux trouver une réponse : Oui ! Gardez simplement à l'esprit que cette solution NE COMPORTE PAS de boutons de contrôle du lecteur multimédia.

Ce que nous voulons faire, c'est deux choses :

1) Empêcher le lecteur multimédia d'afficher des notifications lorsque l'écran est éteint

2) Créez une notification lorsque l'écran se rallume, et seulement si le lecteur multimédia n'en a pas déjà créé une. PLUS, supprimer notre propre notification dès que le lecteur multimédia en affiche à nouveau une.

La première chose est facile :

Disable/Enable Notifications depending on Screen Activity State

En utilisant la puissance d'un bloc "Display On ?" réglé sur "When Changed", vous pouvez précisément activer ou désactiver les notifications pour votre application de lecteur. Lorsque l'état de l'écran devient désactivé, la fibre passe par Non. Le bloc AppOp désactive l'autorisation d'afficher des notifications. Vous avez utilisé le bloc Allow Notifications avant, vous pouvez utiliser celui-là aussi. Après les avoir désactivées, la fibre revient au bloc "Display On ?". Maintenant, lorsque l'écran affiche "Allumé", il passe par Oui et exécute l'autre bloc AppOp, ce qui permet de réactiver les notifications.

Ce script est simple et s'exécutera parallèlement à notre script qui crée une notification dès que l'écran est rallumé. Cela viendra dans la deuxième partie :

Notification

Le bloc "Display On ?" situé tout en haut est le premier bloc dont nous avons besoin. Il est réglé sur "When Changed" et ne se déclenche que lorsque l'écran est TURNED ON. Dès que cela se produit, nous voulons savoir si le lecteur multimédia a déjà affiché une notification. Pour ce faire, nous pouvons utiliser le bloc "Notification Posted ?" (qui, dans le flux, est intitulé "Has notification"). Il est défini sur Immédiatement et demande simplement si une application a affiché une notification ou non. Dans ce cas, notre application est votre lecteur multimédia. Vous devez l'écrire dans le bloc. Si elle l'a déjà fait, nous n'avons pas besoin de créer une notification, donc la fibre retourne à "Display On ?". Si elle n'a PAS créé de notification, nous allons créer notre notification.

Vous voulez que cette notification indique le titre, l'artiste ou l'album de la piste en cours. Pour trouver cette information, nous utilisons le bloc "Media Playing ?" réglé sur "Immediately". Vous pouvez attribuer de nombreuses valeurs aux variables, notamment le titre, l'album, l'artiste, la durée (en secondes), la position actuelle (en secondes), etc. Seuls le titre, l'album et l'artiste nous intéressent pour l'instant.

Maintenant, vous devez écouter. Nous ne pouvons pas simplement dire à Automate d'annuler la notification après "Time X" (Timeout) ou lorsque "Media Player Changed". Nous devons le faire manuellement. Automate ne dispose pas d'une option de délai d'attente pour les notifications (je n'en suis pas sûr, mais je pense que c'était le cas il y a longtemps ). Donc, nous créons un script qui affiche la notification et attend que l'on clique dessus pour ouvrir le lecteur multimédia, et un autre qui ANNULE cette notification dès que le lecteur multimédia en affiche une de lui-même.

Notification and Notification Cancel Script

Le script de gauche crée une notification. Il est réglé sur "When clicked".

NOTIFICATION

Dans cette notification, vous pouvez définir le titre et le message. Au lieu d'entrer du texte brut, vous pouvez également utiliser le contenu des variables, comme l'indique java.println(). Veillez à passer en mode de saisie des variables, car sinon, "Title" sera traité comme du texte. Vous verriez alors "Title" dans le message de votre notification, et non le contenu de la variable.

Après ce blocage, nous pouvons procéder. Lorsque vous cliquez sur la notification, la fibre va passer par Oui et aller dans le bloc "Démarrage de l'application". Ici, vous pouvez entrer le package de votre application. Ainsi, dès que vous cliquez sur votre notification, le lecteur multimédia s'ouvre. PLUS : La notification montre déjà le titre, l'album et l'artiste de la piste en cours. Il ne nous reste plus qu'à annuler la notification.

Nous ne pouvons pas nous contenter d'attendre que le lecteur multimédia ait affiché une nouvelle notification. C'est important ! Nous devons attendre que la piste ait changé.

Notification Cancel

Dans cette partie du script, la fibre entre dans le bloc "Media Playing ?". Celui-ci est réglé sur "When Changed", sans autre argument d'entrée (autre que le paquet d'applications). Il est juste là pour attendre que la piste soit changée ou mise en pause. Dès que cela se produit, nous voulons maintenant supprimer notre notification. Pour supprimer une notification à l'aide du bloc "Notification Cancel", nous devons spécifier l'ID de la notification que nous voulons supprimer. Nous ne l'avons pas, pour le moment. MAIS, le bloc "Notification postée ?" peut nous aider à le faire. Nous utilisons le bloc "Has Notification", et vérifions si com.Android.automate a posté une notification, et si oui, nous assignons son ID à une variable. NOTE : Attention à la notification "Running..." ! Si vous ne l'avez pas déjà désactivée, vous devriez le faire maintenant. Automate pourrait renvoyer l'ID de CETTE notification, qui n'est pas celle que nous voulons supprimer.

Maintenant, la fibre continue dans le bloc Notification Cancel, dans lequel vous devez entrer la variable ID. Dès que la notification est annulée, le bloc Notification Show se poursuit par le NO-Path. Celui-ci ramène à la question "Display On ?" du début.

NOTE : Nous ne pouvons pas attendre que le Media Player affiche une notification pour que la piste change ! Si nous attendions que le lecteur multimédia affiche une nouvelle notification, nous pourrions avoir CE scénario :

Écran activé - L'automate affiche la notification - Écran désactivé (la notification de l'automate persiste) - La piste du lecteur multimédia change (mais n'envoie pas de notification, car l'écran est désactivé) - Écran activé - L'automate affiche toujours la notification de la piste précédente (la notification est périmée).

L'option "Quand la piste change" supprimera la notification des Automates. Lorsque l'écran sera allumé, le lecteur multimédia affichera une nouvelle notification. Mais lorsque l'écran est éteint, notre notification actuelle sera supprimée, et une nouvelle sera créée dès que l'écran sera rallumé.

Voici le script complet avec toutes ses parties. NOTE : Soyez conscient de ces blocs Fork. Je ne les ai pas mentionnés dans la réponse.

ENTIRE SCRIPT

J'ai mis ce script à la disposition de la communauté. Vous pouvez le trouver ICI . Il vous suffit maintenant de modifier les valeurs des blocs et les noms des paquets d'applications.

J'espère que cela vous aidera ! Bonne chance !

EDIT : Ce script n'inclut pas les fonctionnalités de mon autre réponse. Ce script ne s'arrête pas automatiquement dès que le Media Player est fermé. Et jusqu'à présent, vous devez également lancer ce script manuellement. Les deux choses pourraient être incluses cependant.

0voto

ULTRACOMFY Points 36

J'ai enfin trouvé la réponse ultime à votre question. Je ne pensais pas que ce serait aussi simple. J'étais aveuglé par l'idée que le fait de mettre en pause et de reprendre la lecture immédiatement créerait une interruption audible. Mais vous avez dit que ce n'était pas le cas, alors voilà :

Automate Script

Il suffit de désactiver les notifications lorsque l'écran est éteint, de les réactiver lorsqu'il se rallume et de forcer la première notification. C'est fait.

Une chose à laquelle je n'arrête pas de penser : Et s'il n'y avait pas de lecture ? Quoi qu'il en soit, chaque fois que vous allumez votre écran, ce script reprend la lecture. Même si vous l'avez juste mis en pause pendant une minute. Ce problème serait facilement résolu en demandant la lecture du média juste après le bloc "Screen On ?". S'il retourne un "Non" en passant par cette voie, il vous suffit de revenir au bloc "Display On ?

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