7 votes

Où Lollipop stocke-t-il le journal des notifications ?

Android 4.3 et plus permet d'accéder à une liste de notifications historiques à l'aide de la fonction Paramètres widget. La portée de "historique" est limitée à la session actuelle d'Android et la liste est remplie de nouvelles entrées lorsque le système est redémarré.

(Cliquez sur l'image pour l'agrandir)

IMG:

Donc, Où est stocké ce journal de notification dans Android ?

  • Je n'ai pas eu de chance de trouver quelque chose de bien nommé "notification". J'ai déjà effectué une recherche à l'échelle du système, sans rien de positif à rapporter ici.

    find / -iname "*notification*"
  • J'ai regardé la sortie en temps réel de adb logcat -v long (J'ai également essayé avec un accès Root explicite) mais il n'y avait aucun événement commun lorsqu'une notification apparaissait dans le tiroir de notification. Je surveillais la requête ping (qui apparaît comme une notification) vers KDE Connect envoyé depuis mon Slackware Linux, pour le cas de test.

  • Les entrées qui sont visibles dans le tiroir de notification peuvent être retracées jusqu'à la sortie du programme notification service,

    adb shell dumpsys notification

    Comme on l'a dit, vous obtenez ceux qui sont actuels mais pas ceux qui sont historiques.

  • Le vrai nom ou le nom de code (je suppose) de notification le service est android.app.INotificationManager . J'ai tenté de plonger dans son source code et il n'y a rien de positif à signaler. Il est très probable que, n'étant pas programmeur, j'ai pu manquer une ou deux choses importantes.

  • J'ai jeté un coup d'œil dans le répertoire de données de la base de données de l'entreprise. Paramètres ( com.android.settings ) et Paramètres Stockage ( com.android.providers.settings ) applications. Rien d'intéressant ici.

Je suppose que le journal est géré dans la mémoire par un programme ou à un emplacement de stockage où les journaux sont fréquemment vidés après la fin de la session Android en cours. Je n'ai aucune idée de ce dont je parle ici.

Edit :

J'ai le Accès aux notifications à Tasker sous Paramètres → Gestionnaire de notifications déjà activé. Ce n'est donc pas le problème ici.

( Demandé à par Lucky) L'intention associée à cette Journal des notifications fenêtre accessible par Paramètres Le wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid wid a les choses suivantes :

  • Action : android.intent.action.MAIN
  • Catégorie : com.android.settings.SHORTCUT
  • Drapeau : 0x10200000
  • Composant : com.android.settings/.Settings$NotificationStationActivity

Note

  • J'ai un OnePlus One enraciné qui fonctionne avec COS12 (Xposed Framework installé) et plusieurs ROMs Android 5.1.
  • Je suis tout à fait conscient de l'existence de nombreuses applications qui peuvent enregistrer les notifications et vous permettre de les voir. Mais comme vous l'aurez deviné, je ne suis pas intéressé par le passé futuriste mais par le passé lié au moment présent. En bref, je veux avoir accès aux fichiers bruts natifs ou aux journaux pour voir à la fois les notifications historiques et actuelles sans dépendre d'applications tierces.

Mon objectif

Lorsqu'un utilisateur secondaire est au point, Tasker (exécuté sous l'utilisateur principal) manque tout profil qui dépend d'une notification entrante. Google a noté le fait que aquí :

Les notifications pour les autres utilisateurs n'apparaissent pas tant qu'elles ne sont pas actives.

Mais vous pouvez toujours voir ces nouvelles notifications dans la sortie de adb shell dumpsys notification . Je veux donc accéder directement aux journaux pour faire fonctionner ma (mes) tâche(s), et ainsi ne plus dépendre des notifications qui s'affichent dans le tiroir des notifications.

8voto

David Negron Points 971

L'enregistrement historique est stocké en mémoire, et n'est pas directement disponible dans l'API du service (pour autant que je sache). L'activité Paramètres y accède par le biais de la fonction NotificationService.getHistoricalNotifications() mais cette méthode n'est pas exposée dans l'application NotificationManager API (seulement getActiveNotifications() est). Vous pouvez peut-être le faire par réflexion (non testé) mais vous ne pourrez certainement pas trouver un fichier contenant ces informations. D'après ce que je comprends de la plupart des applications qui affichent ces enregistrements, elles conservent en fait leur propre liste quelque part et ajoutent les nouveaux éléments au fur et à mesure qu'ils sont publiés. Par conséquent, elles ne seraient pas en mesure d'accéder à votre historique d'avant l'installation.

Toute la logique de la gestion de la file d'attente se trouve dans le module NotificationManagerService$Archive classe intérieure . En gros, lorsqu'une nouvelle notification arrive, le système l'envoie au service qui appelle alors Archive.record(notification) . Par défaut, la configuration de l'AOSP est telle que l'archive peut contenir un maximum de 1,5 million d'euros. 100 enregistrements alors il commencera à retirer l'élément précédent de la file d'attente chaque fois qu'un nouvel élément sera ajouté.

Votre seule véritable option ici sera probablement d'interroger la sortie de l'un ou l'autre des éléments suivants adb dumpsys ou le NotificationManager .

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