7 votos

¿Dónde almacena Lollipop el registro de notificaciones?

Android 4.3 y superior permite acceder a una lista de notificaciones históricas mediante la función Ajustes widget. El alcance del "histórico" se limita a la sesión actual de Android y la lista se rellena con nuevas entradas una vez que se reinicia el sistema.

(Haga clic en la imagen para ampliarla)

IMG:

Así que, ¿Dónde se almacena este registro de notificaciones en Android?

  • No he tenido suerte en encontrar nada bueno llamado "notificación". Ya hice una búsqueda en todo el sistema sin nada positivo que informar aquí.

    find / -iname "*notification*"
  • He visto la salida en tiempo real de adb logcat -v long (también lo intenté con acceso Root explícito) pero no había ningún evento común cuando aparecía una notificación en el cajón de notificaciones. Yo estaba monitoreando la solicitud de ping (aparece como una notificación) a KDE Connect enviado desde mi Slackware Linux, para el caso de prueba.

  • Las entradas visibles en el cajón de notificaciones pueden ser rastreadas hasta la salida de notification servicio,

    adb shell dumpsys notification

    Como se ha dicho, se obtienen los actuales pero no los históricos.

  • El verdadero nombre o nombre en clave (supongo) de notification servicio es android.app.INotificationManager . Intenté sumergirme en su fuente código y no hay nada positivo que informar. Es muy probable que, al no ser programador, se me haya escapado alguna cosa importante.

  • Yo, a pesar de ser reacio por ilógico, me asomé al directorio de datos de Ajustes ( com.android.settings ) y Ajustes Almacenamiento ( com.android.providers.settings ) aplicaciones. No hay nada interesante.

Supongo que, o bien el registro se gestiona en la memoria por un programa o en alguna ubicación en el almacenamiento donde los registros se vacían con frecuencia después de la sesión actual de Android termina. No tengo ni idea de lo que estoy hablando.

Editar:

Tengo la Acceso a la notificación a Tasker bajo Ajustes → Gestor de notificaciones ya habilitado. Así que definitivamente ese no es el obstáculo aquí.

( Preguntado por Lucky) La intención asociada a esa Registro de notificaciones ventana accesible a través de Ajustes widget tiene las siguientes cosas:

  • Acción: android.intent.action.MAIN
  • Categoría: com.android.settings.SHORTCUT
  • Bandera: 0x10200000
  • Componente: com.android.settings/.Settings$NotificationStationActivity

Nota

  • Tengo un OnePlus One rooteado corriendo COS12 (Xposed Framework instalado) y muchas ROMs de Android 5.1.
  • Soy absolutamente consciente de que hay muchas aplicaciones que pueden grabar las notificaciones y te permiten verlas. Pero como ya habrás adivinado, no me interesa el pasado futurista sino el pasado relacionado con el momento presente. En resumen, quiero tener acceso a los archivos nativos sin procesar o a los registros para ver tanto las notificaciones históricas como las actuales sin depender de aplicaciones de terceros.

Mi objetivo

Cuando un usuario secundario está enfocado, Tasker (que se ejecuta bajo el usuario principal) pierde cualquier perfil que dependa de una notificación entrante. Google ha observado el hecho de que aquí :

Las notificaciones de otros usuarios no aparecen hasta que están activas.

Pero todavía puede ver esas nuevas notificaciones en la salida de adb shell dumpsys notification . Así que quiero acceder a los registros directamente para hacer que mis tareas funcionen, eliminando así la dependencia de las notificaciones que aparecen en el cajón de notificaciones.

0 votos

Tal vez usar una llamada de servicio. StatusBarNotification[] " getActiveNotifications() " que traiga una lista de notificaciones que no han sido descartadas. Así que tiene que haber uno para todas las notificaciones déjame ir a buscar la información del gestor de notificaciones. developer.Android.com/reference/Android/app/ developer.Android.com/reference/Android/service/notification/

0 votos

Gracias Bo, pero no estoy metido en ninguna programación ni siquiera con Tasker. Honestamente, no puedo usarlo porque no se puede solucionar problemas que no entiende en absoluto, al menos yo no puedo. Su enfoque puede ser capaz de darme la lista, incluso si tiene sólo las notificaciones actuales, pero la esencia no sería muy diferente de la salida de dumpsys notification . En última instancia, pedí un archivo porque puedo establecer el evento de modificación del archivo para que la tarea se ejecute inmediatamente. Su función o notification La salida del servicio tiene que ser revisada periódicamente para ver si hay diferencias.

0 votos

Entiendo y no estoy seguro de que estés en lo cierto, pero estaba pensando que con una llamada de servicio de shell. Usted podría entonces rastrear a través del registro de las acciones realizadas. Era sólo un pensamiento pasajero que debería mencionar por si acaso. Voy a mantener mi ojo hacia fuera sin embargo para una solución.

8voto

David Negron Puntos 971

El registro histórico se almacena en la memoria, y no está disponible directamente en la API del servicio (que yo sepa). La actividad de Configuración accede a él a través del NotificationService.getHistoricalNotifications() pero este método no está expuesto en el NotificationManager API (sólo getActiveNotifications() es). Es posible que puedas hacerlo a través de la reflexión (no lo he probado) pero definitivamente no podrás encontrar un archivo con esta información. Según tengo entendido, la mayoría de las aplicaciones que muestran estos registros mantienen su propia lista en algún lugar y añaden nuevos elementos a medida que se publican. Por lo tanto, no podrían acceder a su registro histórico desde antes del momento de la instalación.

Toda la lógica para la gestión de la cola está en el NotificationManagerService$Archive clase interna . La esencia de esto es que cuando llega una nueva notificación, el sistema la envía al servicio que luego llama a Archive.record(notification) . Por defecto, AOSP tiene la configuración establecida para que el Archivo contenga un máximo de 100 registros entonces empezará a sacar el primer elemento de la cola cada vez que se añada uno nuevo.

Su única opción real aquí es probablemente va a ser el sondeo de la salida de cualquiera de adb dumpsys o el NotificationManager .

0 votos

+1 Gracias. Esto da una buena visión. Tal y como sospechaba, todo está en la memoria. En cuanto a las aplicaciones de terceros, he probado dos aplicaciones de este tipo y registraron las entradas de notificación en una base de datos, por eso siempre pueden mostrar las entradas después de un reinicio o así.

0 votos

Acabo de reiniciar y el historial estaba vacío. Así que me gustaría confirmar que se mantiene en la memoria.

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