2015-01-20 10 views
7

Mam nadzieję, że nie narusza to żadnej reguły, ponieważ próbowałem postępować zgodnie z instrukcjami "Jak pytać".NotificationListenerService nie odczytuje tekstu ułożonych powiadomień

Próbuję odczytać przychodzące powiadomienia za pomocą usługi NotificationListenerService i działa ona dla mnie, ale tylko częściowo.

Pierwsze powiadomienie o jego typie, powiedzmy - WhatsApp, że mogę uzyskać ticker, tekst i tytuł, ale potem , jeśli powiadomienia się kumulują, nie mogę już czytać tekstu wiadomości.

Jak uzyskać tekst skumulowanych powiadomień?

Oto kod I obecnie realizować:

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

Wierzę, że to jest właściwa/default Android zachowanie. Szukam źródeł, które mogą mi pomóc, ale widziałem podobne problemy: przeczytałeś tylko powiadomienie o pierwszym stosie. – shkschneider

+0

Aplikacja airdroid na przykład używa tej samej metody notificationListenerService i poprawnie odczytuje powiadomienia, więc jestem pewien, że istnieje sposób, że po prostu nie jestem świadomy – Bended

+0

Czy znalazłeś odpowiedź na to? – user1406716

Odpowiedz

0

nie wiem, czy ja missunderstood cię, ale mam kod, który get WhatsApp powiadomienia ułożone i pokazuje na LogCat jeden po drugim, tylko problem, że ja "Mam to, że kiedy otrzymuję pierwszą wiadomość, mój tekst na logcat pokazuje mi null, a po pierwszym, wszystkie przychodzące wiadomości działa.

`Usługa klasy publicznej NotificationService rozszerza NotificationListenerService { Kontekst kontekstowy; @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

Jeśli pracujesz z Androidem 7.0+, WhatsApp wykorzystuje MessageStyle Expanded Powiadomienia. Tutaj - https://developer.android.com/training/notify-user/expanded.html#message-style

Aby pobrać wszystkie 5 wiadomości od notyfikacji jak

MyFriend (5 messages) 
testt 

Wykonaj:

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

      } 
     } 
    } 
Powiązane problemy