2015-03-31 16 views
7

Die Frage ist, wie Sie das TEXT (nicht Titel) Feld aller eingehenden Benachrichtigungen erhalten, wenn sie gestapelt werden (wie in WhatsApp).So erhalten Sie Text von gestapelten Benachrichtigungen in Android

enter image description here

public class NLService extends NotificationListenerService { 
public void onNotificationPosted(StatusBarNotification sbn) { 

    Log.v(Constants.TAG_notifs, 
      "------------------------- in onNotificationPosted(), Notification Text = " 
        + sbn.getNotification().tickerText); 


    Bundle extras = sbn.getNotification().extras; 

    if (extras.containsKey("android.text")) { 
     if (extras.getCharSequence("android.text") != null) { 
      String text = extras.getCharSequence("android.text").toString(); 
      Log.v(Constants.TAG_notifs, 
        "------------------------- in onNotificationPosted(), Bundle.text != NULL, so here it is = " 
          + text); 
     } 
    } 

    if (extras.containsKey("android.title")) { 
     Log.v(Constants.TAG_notifs, 
       "------------------------- in onNotificationPosted(), Bundle android.title = " 
         + extras.getString("android.title")); 
    } 

} 

@Override 
public void onNotificationRemoved(StatusBarNotification sbn) { 
    //super.onNotificationRemoved(sbn); 
} 

} Das erste Mal, wenn eine Whatsapp Benachrichtigung von einem einzelnen Benutzer kommt diese Zeile (String text = extras.getCharSequence ("android.text") toString();.) ist erfolgreich in der Lage zu lesen Text, aber danach, wenn mehr Nachrichten kommen und Benachrichtigungen gestapelt werden (wie im Bild oben gezeigt), ist die Variable Text immer NULL.

Dies muss möglich sein, weil this app tut es, getestet es. Es erhält den Text jeder einzelnen App.

Added Incentive: Wenn Sie die Antwort oder Dinge wissen, um zu versuchen, es ist eine andere Frage, die here ähnliche Frage aussieht.

Antwort

14

WhatsApp-Anwendung hat Struktur Benachrichtigung, wie dies für das Senden:

 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 ---- 

Letzte Meldung mit Titel kommt als Paketname: WhatsApp und Text als: X-Nachrichten von Y Conversation

Um Text:

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

Um Titel:

Um mit diesem sturcture von Stapeln arbeiten, wir müssen diese Benachrichtigung Stapel analysieren und nur selektive Informationen in unserer Anwendung

Ich hoffe, meine Antwort Ihre Anfrage

+0

Wenn die zweite Benachrichtigung (sagen wir von A in Ihrem Beispiel) kommt 'sbn.getNotification(). Extras.getCharSequence (Notification.EXTRA_TEXT) .toString(); ' ist NULL, dort ist nichts. Siehst du es nicht auch NULL? Ich versuche es in Kitkat, API = 19 – user1406716

+0

Ich bin mir nicht sicher, ob das wahr ist, könnten Sie auch auf die vorherigen Benachrichtigungen näher eingehen ?: * Auf diese Weise, wenn neue Absender-Nachricht kommt, PreVoud Benachrichtigungen auch kommt und wir bekommen Callback in NotificationListener * " – user1406716

+0

Für KitKat sollte es gut mit AccessibilityService funktionieren .. Versuchen Sie, diesen Service Callback zu verwenden. In meinem Fall war AccessibilityService bis (<= KitKat) gut, also pls überprüfen Sie mit – Kushal

0

Nur auf WhatsApp recherchiert helfen und löst Anzeige mit Zugänglichkeitsdienstberechtigung alle eingehenden Benachrichtigungen, wenn sie gestapelt werden (wie in WhatsApp), können Sie die Methode getRecord() AccessibilityEvent verwenden, um Kontext im Stapel zu extrahieren. Inhalt enthält [Absender, um die Zeit, Kontext, index] getestet auf Android 5.1 auf MOTO G

1

ich denke, das Ihnen helfen kann:

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

Wenn Sie mit Android arbeiten 7.0+, WhatsApp verwendet MessageStyle Expanded Notifications. Hier - https://developer.android.com/training/notify-user/expanded.html#message-style

Zum Abrufen alle 5 Nachrichten von einer Benachrichtigung wie

MyFriend (5 messages) 
testt 

tun:

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

      } 
     } 
    } 

Gleiche wie meine Antwort here.

Verwandte Themen