私はadb logcatによって作成されたログを読み込むアプリケーションを作成しようとしています。 link1とlink2上のコードに続いて、私は次のコードを持っている:Android:アプリケーションログ経由でログを読む
try {
Process process = Runtime.getRuntime().exec("logcat");
System.out.println("Process : " + process); // shows process id
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
System.out.println("Buffered reader : " + bufferedReader.readLine());
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) {
}
バッファリング読者が読んでいるかをテストするために、私はのprintlnを入れて、私はメッセージ「TCPバインドできません:5038」を取得します。上記のコードはログを読みません。私も "logcat *:V"を使ってみましたが、最低優先度のログも取得しませんでした。
私はアプリに許可を与えました:android.permission.READ_LOGS。
Androidエミュレータで自分のコードをテストしています。
誰かが間違っていることを指摘できますか?
ありがとうございます。
EDIT:
が、私は "logcat -d" しようとした私は、ログの1行を得ました。このコードでは、try/catchブロックが提供されていることがわかります。 私はアプリから許可READ_LOGSを取り除くと、例外は発生しません。とbufferReaderは単にnullを出力します(通常、アプリケーションが必要な権限を見つけられなかった場合、例外が発生します)。 この動作の理由は何ですか?
EDIT2:
私が試したLog.d(TAG、log.toString())とテキストの複数行を得ました。誰かが前回の編集の最後の質問を説明してください:必要な権限を削除すると、なぜアプリケーションによって例外が発生しないのですか?
「logcat -d」afaikである必要があります。しかし、ログの読み込みを停止しないため、ANRを取得する可能性があります。あなたは、バックグラウンドスレッド、AsyncTaskまたはそのようなもので読書を移動する必要があります。編集:忘れて、いいえANR。 – zapl
@zapl私は質問を編集しました。 – Jake
あなたのTextViewディスプレイは1行以上表示できます( 'android:singleLine')?また、 'tv.setText(log.toString());'を実行した後、 'Log.d(" TAG "、log.toString());'を実行して、表示エラーでないことを確認することもできます。それとも例外がありますか?もしそうなら、あなたの質問にそれを加えてください。 – zapl