有没有办法获取设备通知历史记录?

问题描述 投票:11回答:2

我正在开发一个使用情况统计应用程序,我想知道其他应用程序如何访问设备通知历史记录。

现在我正在使用NotificationListenerService,但这只能处理收到的新通知,而不是过去的通知。我检查了Android DOC,发现了一些'系统'的方法,比如getHistoricalNotifications(),或需要ACCESS_NOTIFICATION权限。

问题在于,有一些实际上可以访问通知历史数据的应用程序。

Android DOC还在Android Q上显示了一个名为NotificationStats的新API,但暂时无法使用。

有小费吗?这甚至可能以非黑客的方式进行吗?

android kotlin notifications android-notifications
2个回答
2
投票

ActionDash显示了这个enter image description here

正如您所提到的,getHistoricalNotifications是系统级应用程序只能访问的系统级API,因此Google Digital Wellbeing作为系统应用程序可以显示这些。

所以我认为没有办法获取第三方应用程序的通知历史记录。

/**
         * 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;
        }

0
投票

您应该在收到通知到sql数据库时存储应用程序通知数据,并且当您想要相应应用程序通知的历史记录时,您可以通过将查询放入sql数据库来轻松获取所有通知。

© www.soinside.com 2019 - 2024. All rights reserved.