2015-01-20 15 views
7

Umarım bu, nasıl yapılır sorusunu izleyerek denediğim gibi herhangi bir kuralı ihlal etmez.NotificationListenerService yığılmış bildirimlerin metnini okumayan

Gelen bildirimleri NotificationListenerService kullanarak okumaya çalışıyorum ve bu yalnızca benim için değil, yalnızca kısmen çalışıyor.

Türünün ilk bildirimi, şunu söyleyelim - whatsapp sıralayıcıyı, metni ve başlığı alabilirim ancak daha sonra bildirimleri yığılırsa iletilerin metnini okuyamıyorum.

Yığılmış bildirimlerin metnini nasıl alabilirim? İşte

Şu anda uygulamak kodudur:

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

    } 


} 
+0

Bu doğru/Varsayılan Android davranış olduğuna inanıyoruz. Benim dikkatimi çekmek için kaynaklar arıyorum ama benzer sorunları gördüm: sadece ilk yığın bildirimini okuyorsunuz. – shkschneider

+0

app airdroid örneğin, aynı notificationListenerService yöntemini kullanın ve bildirimleri doğru okur, bu yüzden emin değilim ki bir şey olduğunu biliyorum – Bended

+0

Bunun için bir cevap buldunuz mu? – user1406716

cevap

0

ben seni missunderstood eğer bilmiyorum, ama en yığılmış bildirimleri WhatsApp olsun ve tek LogCat tek üzerinde gösteren bir kod, sadece sorunu var o ben İlk mesajı aldığımda, logcat'teki metnimin bana null olduğunu ve ilk önce gelen tüm iletilerin çalıştığını gösteriyor. Ortak sınıf NotificationService genişletiyor NotificationListenerService { @Override

public void onCreate() { 

     super.onCreate(); 
     context = getApplicationContext(); 

    } 
    @Override 
    public void onNotificationPosted(StatusBarNotification sbn) { 

     String pack = sbn.getPackageName(); 
     String ticker = ""; 
     if (sbn.getNotification().tickerText != null) { 
      ticker = sbn.getNotification().tickerText.toString(); 
     } 
     Bitmap bmp; 
     Bundle extras; 
     byte[] byteArrayS; 
     String encoded = null; 

     extras = sbn.getNotification().extras; 
     Log.d("extras", extras.toString()); 

     String contato=""; 
     String texto = ""; 
     String search = "mensagens"; 
      if((extras.getString("android.title").toLowerCase().contains(search.toLowerCase()))){ 
       if(extras.getString("android.title").toLowerCase().contains("Whatsapp".toLowerCase())){ 
        extras.getString("android.title").replace("Whatsapp ",""); 
        Log.d("REPLACE","REPLACE CONCLUÍDO"); 
       } 

       if((extras.getString("android.text").toLowerCase().contains(search.toLowerCase()))){ 
        Log.d("MSG1","MENSAGEM NÃO AUTORIZADA"); 
       } 
      } 

      //TRATA AS NOTIFICAÇÕES FAZENDO COM QUE CADA MENSAGEM ENTRE DE UMA EM UMA DENTRO DA LISTA. 
      if (extras.getCharSequence("android.text") != "") { 
       if(extras.getString("android.summaryText")!= null) { 
        contato = extras.getString("android.title"); 
        texto = extras.getCharSequence("android.text").toString(); 
        Log.d("TEXTO1", texto); 
       } 
      } 
      if(extras.getCharSequenceArray(Notification.EXTRA_TEXT_LINES) != null){ 

       if (extras.get("android.textLines") != null) { 
        CharSequence[] charText = (CharSequence[]) extras 
          .get("android.textLines"); 
        Log.d("CHARTEXT",charText.toString()); 
        if (charText.length > 0) { 
         texto = charText[charText.length - 1].toString(); 
         Log.d("TEXTO2",texto); 
        } 

       } 
     } 



     Log.i("ContatoINTENT",contato); 
     if (texto != "") { 
      Log.i("TextoINTENT",texto); 
     } 

`

0

Android 7.0+ ile çalışıyorsanız, WhatsApp MessageStyle Genişletilmiş Bildirimler kullanır. İşte - bunu yapın https://developer.android.com/training/notify-user/expanded.html#message-style

MyFriend (5 messages) 
testt 

gibi bir bildirimden bütün 5 iletileri almak için:

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

      } 
     } 
    }