Estoy desarrollando una aplicación de estadísticas de uso y me pregunto cómo otras aplicaciones pueden acceder al historial de notificaciones de los dispositivos .
En este momento estoy trabajando con NotificationListenerService , pero esto solo puede manejar las notificaciones nuevas recibidas, no las pasadas. Revisé el DOC de Android y encontré algunos métodos que son 'solo del sistema', como getHistoricalNotifications() , o que requieren el permiso ACCESS_NOTIFICATION .
La cuestión es que hay algunas aplicaciones que realmente pueden acceder a los datos del historial de notificaciones.
Android DOC también muestra una nueva API en Android Q llamada NotificationStats pero no está disponible en este momento.
¿Algun consejo? ¿Es esto posible de una manera no hacky?
Como mencionó, getHistoricalNotifications es una API de nivel de sistema a la que solo acceden las aplicaciones del sistema, por lo que Google Digital Wellbeing, que es una aplicación del sistema, puede mostrarlas.
Así que creo que no hay forma de obtener un historial de notificaciones para aplicaciones de terceros.
/** * System-only API for getting a list of recent (cleared, no longer shown) notifications. * * Requires ACCESS_NOTIFICATIONS which is signature|system. */ @Override public StatusBarNotification[] getHistoricalNotifications(String callingPkg, int count) { // enforce() will ensure the calling uid has the correct permission getContext().enforceCallingOrSelfPermission( android.Manifest.permission.ACCESS_NOTIFICATIONS, "NotificationManagerService.getHistoricalNotifications"); StatusBarNotification[] tmp = null; int uid = Binder.getCallingUid(); // noteOp will check to make sure the callingPkg matches the uid if (mAppOps.noteOpNoThrow(AppOpsManager.OP_ACCESS_NOTIFICATIONS, uid, callingPkg) == AppOpsManager.MODE_ALLOWED) { synchronized (mArchive) { tmp = mArchive.getArray(count); } } return tmp; }Debe almacenar los datos de notificación de la aplicación cuando se recibe la notificación en la base de datos sql y cuando desea el historial de la notificación de la aplicación respectiva, puede obtener fácilmente todas las notificaciones al realizar una consulta en la base de datos sql.