2016-06-19 14 views
0

Ich habe eine App, die Benachrichtigungen an den Fahrer während der Fahrt liest. Ich versuche die verschiedenen Benachrichtigungen zu analysieren. Diejenigen, die den alten 'tickerText' verwenden, funktionieren gut, aber verschiedene Apps wie Skype unterstützen das nicht. Stattdessen gibt der Text in der Benachrichtigung nach der ersten Nachricht so etwas wie "3 neue Nachrichten" an. Nicht sehr hilfreich. Ich möchte stattdessen die letzte Nachrichtenfolge. Ich schrieb dies:Wie bekomme ich das String-Array von einem Benachrichtigungs-Bundle?

public class Catcher extends NotificationListenerService { 

File file; 
String dir; 
File save; 
int count = 0; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    dir = Environment.getExternalStorageDirectory() + "/NotCatch"; 
    save = new File(dir); 
    if(!save.exists()){ 
     save.mkdirs(); 
    } 

    //Toast.makeText(this, dir + " " + file.getName(), Toast.LENGTH_LONG).show(); 

} 

@Override 
public void onNotificationPosted(StatusBarNotification sbn) { 
    super.onNotificationPosted(sbn); 

    file = new File(save, "NotCatch" + count + ".txt"); 
    count++; 
    String temp = ""; 
    String[] lines; 
    Notification not = sbn.getNotification(); 
    temp += "Category: " + not.category+ "\n"; 
    temp+= "TickerText: " + not.tickerText + "\n"; 

    temp += "Extras..."+ "\n"; 
    Bundle bun = not.extras; 
    temp+= "BigText: " + bun.getString(Notification.EXTRA_BIG_TEXT)+ "\n"; 
    temp+= "SummaryText: " + bun.getString(Notification.EXTRA_SUMMARY_TEXT)+ "\n"; 
    temp+= "InfoText: " + bun.getString(Notification.EXTRA_INFO_TEXT)+ "\n"; 
    temp+= "Text: " + bun.getString(Notification.EXTRA_TEXT)+ "\n"; 
    temp+= "TextLines: " + bun.getString(Notification.EXTRA_TEXT_LINES)+ "\n"; 
    temp+= "SubText: " + bun.getString(Notification.EXTRA_SUB_TEXT) + "\n"; 
    temp+= "Title:" + bun.getString(Notification.EXTRA_TITLE) +"\n"; 
    temp+= "Big Title:" + bun.getString(Notification.EXTRA_TITLE_BIG) +"\n"; 


/* lines = bun.getString(Notification.EXTRA_TEXT_LINES).split("\n"); 

    temp += "Lines... \n" ; 

    int cnt = 0; 
    for (String line : lines) { 
     temp+= cnt + ": " + line + "\n"; 
     cnt++; 
    }*/ 



    Looper.prepare(); 
    try { 
     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(temp.getBytes()); 
     fos.close(); 
     Toast.makeText(this,"File written", Toast.LENGTH_LONG).show(); 
    } catch (FileNotFoundException e) { 
     Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 
    } 

Dies ist nur, was ich bisher für das Testen natürlich habe. Ich kann das Bündel von der Benachrichtigung erhalten, aber es kann das Zeichenfolgenarray der Nachrichtenzeilen nicht erhalten. Im Debugger sieht das so aus. "bun" unten ist das "Bundle" aus der "Benachrichtigung". Debugger

Meine Frage ist dies. Wie erhalte ich das Array von Strings, die mit "ayage message text - 4" beginnen? Dies ist das Paket aus einer Android-Benachrichtigung.

Antwort

0

konnte ich endlich die Saiten auf diese Weise

CharSequence[] lines = bun.getCharSequenceArray(Notification.EXTRA_TEXT_LINES); 
    for(CharSequence line : lines){ 
     temp+= "line: " + line.toString() + "\n"; 
    } 
0

Da die Saiten Sie versuchen, in der ArrayMap MMAP (entsprechend dem Debugger Bild) enthalten abzurufen, und als Implementierungen von Map serializable sind, werden Sie die folgenden ersten abzurufen, die Karte zu tun:

ArrayMap map = bun.getSerializableExtra("mMap"); 

Dann sollten Sie in der Lage sein, das Array von Strings, die Sie wollen (was nach dem Debugger Bild ist ein Array von CharSequence Objekten) mit dem folgenden:

CharSequence[] messages = (CharSequence[]) map.valueAt(1); 

+0

Vielen Dank für die Antwort erhalten. Ich habe es versucht, aber es hat nicht kompiliert. Aber es führt hoffentlich in die richtige Richtung. Die Untersuchung wird fortgesetzt ... – jroal

+0

Möglicherweise müssen Sie die bun.getSerializableExtra in ArrayMap umwandeln. Vermutlich wird Android Studio Ihnen zeigen, warum es nicht kompilieren wird? –