我已实施通知监听器以查找Gmail通知。
我想从通知中收集扩展文本(bigtext),如下面的通知所示:
请参阅“----转发消息---”等,仅在用户展开通知以显示操作按钮时显示。
此字符串值未出现在通知的“EXTRAS”数据中......
http://developer.android.com/reference/android/app/Notification.html
答案 0 :(得分:5)
查看上述链接后,我进一步研究了捆绑(EXTRAS)数据。当您调试它并查看变量时,您可以发现所有关于通知的信息都存储在包中,您可以通过
获取详细信息 notifyBundle.extras.getCharSequence("android.textLines")
用于多行通知和
notifyBundle.extras.getString("android.text")
。
有关更多信息,请查看eclipse调试模式中的变量
Image of variables in bundle for single line notification
Image of variables in bundle for multi line notification
注意:额外的捆绑仅在API19(Kitkat)中可用。我从来没有尝试过低于API19的设备。
答案 1 :(得分:2)
我在Android 7上运行的Gmail遇到了类似的问题。
最终,我已经意识到(在another thread的帮助下)他的解决方案与此处的现有答案不同 - 您可以通过不同的方式访问您正在寻找的内容:< / p>
Bundle extras = statusBarNotification.getNotification().extras;
extras.get(Notification.EXTRA_BIG_TEXT) == null ? null : extras.get(Notification.EXTRA_BIG_TEXT).toString();
这样,即使您要查找的值最初不是字符串,您也将始终获得String或null。这样做是因为直接调用getString(Notification.EXTRA_BIG_TEXT)
会返回null,至少在某些情况下是这样。
如果还有其他任何值,您不确定它们的存储位置,您可以尝试遍历整个附加功能包as explained here。
答案 2 :(得分:1)
最后,我可以使用此代码解决此问题。
ArrayList<StatusBarNotification> groupedNotifications = new ArrayList<>();
for(StatusBarNotification statusBarNotification : mNotificationManager.getActiveNotifications()) {
if(statusBarNotification.getNotification().getGroup().equals(NOTIFICATION_GROUP)) {
groupedNotifications.add(statusBarNotification);
}
}
CharSequence stackNotificationMultiLineText[] = groupedNotifications.get(ZEROTH_INDEX).getNotification().extras.getCharSequenceArray(NotificationCompat.EXTRA_TEXT_LINES);
如果您尝试使用getCharSequence("android.textLines")
,则会返回null,因为NotificationCompat.EXTRA_TEXT_LINES
会返回CharSequence
数组而不是单个CharSequence
对象。
答案 3 :(得分:1)
我找到了一种访问扩展通知的简短方法。这适用于API 24。
如果您在访问null
时获得getCharSequence("android.textLines")
,这是因为它实际上返回了由上面Puneet正确指出的CharSequence
数组。
所以请像这样访问它们:
if (extras.getCharSequenceArray("android.textLines") != null)
text = Arrays.toString(extras.getCharSequenceArray("android.textLines"));