当前位置: 首页 > 知识库问答 >
问题:

NotificationListenerService未读取堆叠通知的文本

程俊力
2023-03-14

我希望这不会违反任何规则,因为我已经尝试过遵循如何提问指南。

我正在尝试使用NotificationListenerService读取传入的通知,它对我有效,但只是部分有效。

它的第一个类型的通知,比方说,whatsapp,我可以获得报价、文本和标题,但如果通知堆叠起来,我就再也无法读取消息的文本了。

如何获取堆叠通知的文本?

下面是我当前实现的代码

public class NotificationService extends NotificationListenerService {

    private Context context;


    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

    }

    @Override
    public void onNotificationPosted(StatusBarNotification sbn) {
        String pack = sbn.getPackageName();
        String ticker = sbn.getNotification().tickerText.toString();
        Bundle extras = sbn.getNotification().extras;
        String title = "";
        String text = "";


        if (extras.containsKey("android.title")) {
            title = extras.getString("android.title");
        }

        if (extras.containsKey("android.text")) {
            if (extras.getCharSequence("android.text") != null) {
                text = extras.getCharSequence("android.text").toString();
            }
        }
        if (pack != null) {
            Log.i("Package", pack);
        }

        if (ticker != null) {
            Log.i("ticker", ticker);
        }

        if (title != null) {
            Log.i("Title", title);
        }

        if (text != null) {
            Log.i("Text", text);
        }


    }

    @Override
    public void onNotificationRemoved(StatusBarNotification sbn) {

    }


}

共有1个答案

楚权
2023-03-14

如果您使用的是Android7.0+,WhatsApp使用的是MessageStyle扩展通知。此处-https://developer.android.com/training/notify-user/expanded.html#消息样式

若要从通知中检索所有5条消息,请执行以下操作:

MyFriend (5 messages)
testt

执行以下操作:

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

        if(b != null){
            content = "";
            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*/

            }
        }
    }
 类似资料:
  • 问题内容: 当我收到这样的远程通知时,我实现了一个打开AlertView的功能: 但是NotificationMessage始终为零。 我的json负载看起来像这样: 我正在使用Xcode 6,Swift,并且正在为iOS8开发。我现在搜索了几个小时,但没有找到任何有用的信息。通知工作正常..如果我单击它,则将打开警报视图。我的问题是,我无法从userInfo中获取数据。 问题答案: 字典的根目录

  • 好的,我有一个csv文件: 我正在使用com.opencsv。CSVReader库。 我需要从行“Detail”中读取,但是我不知道它是哪一行,因为它前面可能有未定义的行数。摘要从第13行开始,但我知道如何使用它。 有没有一个简单的模式,让opencsv找到“细节”行并从那里开始?或者我需要以某种方式计算详细信息之前的行并将其作为参数传递到OPENCSV中吗?

  • 柱形图和面积图可以设置成堆叠的形式,堆叠后同一个分类下的数据不再是水平依次排列而是依次从上到下堆叠在一起。 堆叠有两种形式,普通的堆叠和按百分比堆叠;普通堆叠是按照数值大小依次堆叠,百分比堆叠是按照数值所占百分比进行堆叠。 下面是堆叠图和百分比堆叠图例子: 图 5-1 堆叠图 图 5-2 百分比堆叠图 通过指定柱形图或面积图的 stacking 属性即可是图形堆叠,示例代码如下: plotOpit

  • 我是Android通知频道的新手。我遵循了Google Dev docs关于它的教程,但是我在推送通知时遇到了一些麻烦。我的问题是,如果我得到一个通知,并滑动-取消它或只是不点击它,下面的通知与旧的滑动-取消或未触及的通知。通知正在累积增加。 我的代码如下:

  • 我有一个名为“add”的方法,它将字符串作为参数,并使用bufferedwriter将其写入文件。完成此操作后,bufferedwriter将被刷新。 在另一个方法“read”中,我遍历文件中的行,但这些行是空的(因此我不能打印它们)。

  • 我试着用上传的文件创建ReadSteam并将管道连接到WriteStream: 但出现了这个错误: