1

アプリの logcat イベントを SD カードのテキスト ファイルに保存したいと考えています。私の警報アプリは、私と私の友人のデバイスでは正常に動作しますが、他のアプリではエラーが発生します。たとえば、アプリのアラームの時刻が間違っていると言われますが、私や友人のデバイスではこのエラーは表示されません。この問題とその他の問題のため、アプリに関連するすべてのイベント logcat を原子的に保存したいと考えています。問題を解決するためにログファイルを送ってくれます。これどうやってするの?私の悪い英語でごめんなさい

4

5 に答える 5

3

次の方法で logcat を取得できます。

static final int BUFFER_SIZE = 1024;

public String getLogCat() {
    String[] logcatArgs = new String[] {"logcat", "-v", "time"};

    Process logcatProc = null;
    try {
        logcatProc = Runtime.getRuntime().exec(logcatArgs);
    }
    catch (IOException e) {
        return null;
    }

    BufferedReader reader = null;
    String response = null;
    try {
        String separator = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
            sb.append(separator);
        }
        response = sb.toString();
    }
    catch (IOException e) {
    }
    finally {
        if (reader != null) {
            try {
                reader.close();
            }
            catch (IOException e) {}
        }
    }

    return response;
}

これをSDカードに保存できStringます。

于 2013-01-19T21:53:52.893 に答える
1

このタイプの機能は、 ACRA Android ライブラリによって既に実装されています。ライブラリはクラッシュを検出し、クラッシュ情報を Google ドキュメント スプレッドシートまたは独自の宛先に送信します。

于 2013-01-19T21:51:58.963 に答える
1

次の方法で logcat を取得できます。

static final int BUFFER_SIZE = 1024;

public String getLogCat() {
    String[] logcatArgs = new String[] {"logcat", "-v", "time"};

    Process logcatProc = null;
    try {
        logcatProc = Runtime.getRuntime().exec(logcatArgs);
    }
    catch (IOException e) {
        return null;
    }

    BufferedReader reader = null;
    String response = null;
    try {
        String separator = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder();
        reader = new BufferedReader(new InputStreamReader(logcatProc.getInputStream()), BUFFER_SIZE);
        String line;
        while ((line = reader.readLine()) != null) {
            sb.append(line);
            sb.append(separator);
        }
        response = sb.toString();
    }
    catch (IOException e) {
    }
    finally {
        if (reader != null) {
            try {
                reader.close();
            }
            catch (IOException e) {}
        }
    }

    return response;
}

これをSDカードに保存できStringます。

「どろろ」からのこの回答は、多くの行が原因で常に途中で動かなくなったため、うまくいきませんでしたが、それを修正する方法がわかりません。

于 2013-02-15T08:53:28.390 に答える
1

「-d」引数を指定しない限り、logcat は新しいログの読み取りをブロックします。

試す

   String[] logcatArgs = new String[] {"logcat", "-d", "-v", "time"};
于 2013-02-28T05:53:40.803 に答える