从Android通知获取详细信息/扩展文本?

时间:2014-03-11 16:31:31

标签: android notifications android-notifications

我已实施通知监听器以查找Gmail通知。

我想从通知中收集扩展文本(bigtext),如下面的通知所示:

Expanded text shown in gmail notification

请参阅“----转发消息---”等,仅在用户展开通知以显示操作按钮时显示。

此字符串值未出现在通知的“EXTRAS”数据中......

http://developer.android.com/reference/android/app/Notification.html

4 个答案:

答案 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"));