1

マルチタブ アプリケーションを開発しています。タブの 1 つで、logcat を表示したいのですが、正しく実行するのに多くの問題があります。

現在、次のコマンドを使用していますが、TextView に何も表示されません。:

Process process = Runtime.getRuntime().exec("/system/bin/logcat -s com.vittorio:I");

しかし、ターミナルで同じコマンドを実行すると、問題なく動作します。

この他のコマンドも試しました:

Process process = Runtime.getRuntime().exec("/system/bin/logcat *:I");

しかし、何らかの理由でデバッグレベルのメッセージも出力します...

編集 (1):

ログ全体に高レベルのフィルター (java) を追加することで、この問題を回避しました。そのため、必要なものだけをテキスト ビューに出力します。これは非常に汚い解決策ですが、今のところ、私がなんとか手に入れた唯一の解決策です。

携帯電話でさまざまな動作が発生していることを指摘したいと思います。

  • Galaxy S Plus (root化) : ログが見れます。
  • Galaxy Y (rooted) : ログなし
  • Nexus One (ルート化されていない): ログなし

編集 (2) -解決済み (ROOTED PHONE が必要) :

苦労した後、私は自分の問題を解決することができました。実際に init.rc システム ファイルをナビゲートすると、/dev/log/main と /dev/log/system のアクセス許可が 620 に設定されていることがわかりました。そのため、一部の電話でログを開くことができませんでした。したがって、Nexus Oneもルート化し、logcatコマンドを呼び出す前に、このコマンドをアクティビティに追加しました:

Process process_su = Runtime.getRuntime().exec("su");
Process process_ch = Runtime.getRuntime().exec("chmod 777 /dev/log/main");

終わり!:D

この情報が、私と同じ問題に直面する人に役立つことを願っています。

4

1 に答える 1

1

この権限を使用する必要があります:

<uses-permission android:name="android.permission.READ_LOGS" />

そして、私が見つけたそのスニペットを使用できます

    try {
      Process process = Runtime.getRuntime().exec("logcat -v");

      BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(process.getInputStream()));

      StringBuilder logString=new StringBuilder();
      String line;

      while ((line = bufferedReader.readLine()) != null) {
        logString.append(line);
      }

      TextView tv = (TextView)findViewById(R.id.logTextView);
      tv.setText(logString.toString());

    } catch (IOException e) {

    }

私はそれを試していませんが、それは正しいようです

于 2013-04-26T12:55:04.147 に答える