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".
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.
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
Möglicherweise müssen Sie die bun.getSerializableExtra in ArrayMap umwandeln. Vermutlich wird Android Studio Ihnen zeigen, warum es nicht kompilieren wird? –