Ich möchte Logcat-Protokolle in meiner Anwendung lesen und darauf reagieren.
Ich habe folgenden Code gefunden:
try {
Process process = Runtime.getRuntime().exec("logcat -d");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
StringBuilder log=new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
log.append(line);
}
TextView tv = (TextView)findViewById(R.id.textView1);
tv.setText(log.toString());
}
catch (IOException e) {}
Dieser Code gibt tatsächlich die Logcat-Protokolle zurück, die bis zum Start der Anwendung erstellt wurden.
Aber ist es möglich, auch neue Logcat-Protokolle kontinuierlich anzuhören?
android
logcat
android-logcat
David
quelle
quelle
Antworten:
Sie können die Protokolle weiterlesen, indem Sie das Flag "-d" in Ihrem obigen Code entfernen.
Das Flag "-d" weist logcat an, den Protokollinhalt anzuzeigen und zu beenden. Wenn Sie das Flag entfernen, wird logcat nicht beendet und es werden weiterhin neue Zeilen gesendet.
Denken Sie daran, dass dies Ihre Anwendung blockieren kann, wenn sie nicht richtig entworfen wurde.
Viel Glück.
quelle
Sie können Ihren Logcat mit dieser Methode löschen, die ich verwende, um Logcat nach dem Schreiben in eine Datei zu löschen, um doppelte Zeilen zu vermeiden:
quelle
Mit Coroutinen und dem Beamten Bibliotheken Lifecycle-Livedata-Ktx und Lifecycle-Viewmodel-Ktx ist das ganz einfach:
Verwendung
quelle
WebView
statt zu machenTextView
.Hier ist ein schnelles Zusammenstellen / Ablegen, mit dem alle aktuellen oder alle neuen (seit einer letzten Anforderung) Protokollelemente erfasst werden können.
Sie sollten dies ändern / erweitern, da Sie möglicherweise einen kontinuierlichen Stream anstelle eines LogCapture zurückgeben möchten.
Das Android LogCat "Handbuch": https://developer.android.com/studio/command-line/logcat.html
In Ihrem Projekt, das die Aktivitätsprotokollierung durchführt:
Wenn Sie alles erfassen möchten, was Sie über "Logger" angemeldet haben
Wenn Sie hungrig werden und mehr Holzscheite essen möchten
Sie können das Capture als String mit erhalten
Oder Sie können die Protokollelemente der Erfassung mit abrufen
Es gibt keine genaue statische Methode zum Erfassen von Fremdprotokollschlüsseln, aber es gibt trotzdem eine Möglichkeit
Wenn Sie die oben genannten Informationen verwenden, können Sie auch
Logger.this.nextCapture
die Fremdaufnahme abrufen .quelle
git.hsusa.core.log.controller.AndroidLogController.java
; Möglicherweise möchten Sie meine hscore-Bibliothek anstelle dieser "schnellen und schmutzigen" Lösung verwenden. Um die Protokollierung mit hscore durchzuführen, verwenden Sie:public final static SmartLogContext log = SmartLog.getContextFor("MyLogContext");
um loszulegen. Mit einer besseren API funktioniert es fast genauso. Sie können meinen Git Hub Issue Tracker verwenden, wenn Sie dabei Hilfe benötigen.Das Flag "-c" löscht den Puffer.
-c Löscht (löscht) das gesamte Protokoll und beendet es.
quelle
Ich benutze dies in meiner App und es funktioniert. Und Sie können den obigen Code in Timer Task verwenden, damit Ihr Haupt-Thread nicht gestoppt wird
quelle