如何在安卓手机中查看所有即将到来的通知

45
如何读取Android中所有即将到来的通知?是否可以使用广播接收器来监听传入的通知并能够读取通知信息。

1
您可以查看AccessibilityService,参见http://developer.android.com/training/accessibility/service.html#create或https://dev59.com/nWUq5IYBdhLWcg3wYvd6。 - Robe Elckers
3个回答

29

首先,您必须在清单文件中声明您要接收通知的意图,以便您可以获得android.permission.BIND_NOTIFICATION_LISTENER_SERVICE权限。

AndroidManifest.xml:

<service android:name=".NotificationListener"
         android:label="@string/service_name"
         android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE">
    <intent-filter>
        <action android:name="android.service.notification.NotificationListenerService" />
    </intent-filter>
</service>

然后创建一个NotificationListenerService类并覆盖onNotificationPosted函数。

了解更多信息,请阅读开发者参考文档:https://developer.android.com/reference/android/service/notification/NotificationListenerService.html

还可以查看这个简单的示例应用程序,以获取实现指导:https://github.com/kpbird/NotificationListenerService-Example/


注意:该方法有效,但不适用于“堆叠通知”的文本字段。 - user1406716
4
这个例子对我来说不起作用,我已经获得了通知权限,但还是没有显示任何列表。 - Bhanu Sharma
请问,是否可以通过这种方式将所有通知转换为没有悬浮通知的通知? - android developer
3
能否读取已经存在的通知,还是只能读取即将到来的新通知? - Ewoks
它在 marshmallow 上运行正常,但在 8.0 上出现了通知通道错误。 - Sunil Chaudhary

12
使用 NotificationListenerService,我们可以轻松阅读所有应用程序的通知。 在此处检查完整演示代码这里

感谢提供链接。 - CopsOnRoad
此权限仅适用于系统应用程序。 - nikoss

2

为了获取所有消息,您需要在onNotificationPosted中执行以下操作

if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)){
        Parcelable b[] = (Parcelable[]) extras.get(Notification.EXTRA_MESSAGES);

        if(b != null){

            for (Parcelable tmp : b){

                Bundle msgBundle = (Bundle) tmp;
                content = content + msgBundle.getString("text") + "\n";

            /*Set<String> io = msgBundle.keySet(); // To get the keys available for this bundle*/

            }
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接