How to get text of Stacked Notifications in Android

后端 未结 4 1356
囚心锁ツ
囚心锁ツ 2020-12-15 23:53

The question is how to get the TEXT (not title) field of all incoming notifications when they get stacked (like in Whatsapp).

相关标签:
4条回答
  • 2020-12-16 00:17

    I think this can help you:

    CharSequence[] lines = 
    extras.getCharSequenceArray(Notification.EXTRA_TEXT_LINES);
    if(lines != null && lines.length > 0) {
       StringBuilder sb = new StringBuilder();
       for (CharSequence msg : lines)
          if (!TextUtils.isEmpty(msg)) {
             sb.append(msg.toString());
             sb.append('\n');
          }
       return sb.toString().trim();
    }
    CharSequence chars = 
    extras.getCharSequence(Notification.EXTRA_BIG_TEXT);
    if(!TextUtils.isEmpty(chars))
       return chars.toString();
    
    0 讨论(0)
  • 2020-12-16 00:22

    If you're working with Android 7.0+, WhatsApp uses MessageStyle Expanded Notifications. Here - https://developer.android.com/training/notify-user/expanded.html#message-style

    To retrieve all 5 messages from a notification like

    MyFriend (5 messages)
    testt
    

    Do this:

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

    Same as my answer here.

    0 讨论(0)
  • 2020-12-16 00:36

    WhatsApp application has structure for sending notification like this :

            Case                                 Notification
    
    Message comes from A : Hi                   Title : A    Text: Hi
    
    Message comes from A : How are you          Title : A    Text: How are you
    
                                                Title : A    Text: 2 new messages
    
    
    Message comes from B : Hello                Title : B    Text: Hello
    
                                                Title : B    Text: 1 new message
    
                                                Title : A    Text: 2 new messages
    
                         Title : WhatsApp  Text: 3 new messages from 2 conversation
    ---- Here comes the stacking ----
    
    Message comes from C : Good work            Title : C    Text: Good work
    
                                                Title : C    Text: 1 new message
    
                                                Title : B    Text: 1 new message
    
                                                Title : A    Text: 2 new messages
    
                         Title : WhatsApp  Text: 4 new messages from 3 conversation
    
    
     ---- This way when new sender message comes, previoud notifications also comes and we get callback in NotificationListener ----
    

    Last notification comes with Title as Package Name : WhatsApp and Text as : X messages from Y Conversation

    To get Text :

    sbn.getNotification().extras.getCharSequence(Notification.EXTRA_TEXT).toString();
    

    To get Title :

    sbn.getNotification().extras.getCharSequence(Notification.EXTRA_TITLE).toString();
    

    To work with this sturcture of stacking, we need to parse this notification stack and display only selective information in our application

    I hope my answer will help and solve your query

    0 讨论(0)
  • 2020-12-16 00:39

    Only researched on WhatsApp with Accessibility service permission. all incoming notifications when they get stacked (like in Whatsapp), you can use AccessibilityEvent getRecord() method to extract context in stack. Content contains [sender, to, time, context, index] tested on Android 5.1 on MOTO G

    0 讨论(0)
提交回复
热议问题