2010-11-22 34 views
13

Androidアプリケーションの画面にログメッセージ(android.util.Logを使用して印刷します)を表示することはできますか?Androidアプリケーションの画面にログメッセージを表示

画面に出力するだけの方法がありますか?

のようなものSystem.out.println

+9

人々はちょうど質問を読んでいない驚くべき方法。明らかに、OPは画面上にテキストの行を印刷することを望んでおり、すべての回答がロギングソリューションを指しています。ありがとうございます。 – Kyberias

答えて

4

他の人が示唆しているように、あなたはlog catを使用できます。エミュレータを使用している場合やデバイスをデバッグしている場合は、adb logcatを使用してメッセージを表示できます。 Eclipseのデバッグパースペクティブには、それを行うウィンドウがあります。

デバッガが接続されていない別の方法は、CatLog - Logcat Readerアプリケーションを使用することです。

+0

logcatリーダーが素晴らしい作品! – n1kh1lp

+0

これは非常に便利ですが、アプリに含まれているログが必要な場合は、以下の100rabhの回答が求められます。 (android.util.Logを読み込んでアプリに表示する方法) – garlicman

+1

また、CatLogにはRootが必要です。あなたがRootを利用できない場合、私が今までに見つけた唯一の方法は、アプリケーションからrootでないシェルコマンドとして "logcat"を呼び出すことです。 (リンク100rabhの回答を参照) – garlicman

2

編集

私たちはアンドロイドでいくつかのフレームワークを利用できると思います。それがために働く場合は、これらのリンクをチェックして見てください、あなた

http://developer.android.com/reference/java/util/logging/Logger.html

http://developer.android.com/reference/java/util/logging/LogManager.html

ます。また、このプロジェクトをチェックアウトすることができます...

http://code.google.com/p/microlog4android/

+0

私はちょうど質問に編集しました。スクリーン上に印刷ラインを維持する簡単な方法はありますか? – n1kh1lp

+0

システムからログを取得したら、それは問題ではありません。私はあなたが最初の部分に問題があると仮定しています...更新された投稿を確認してください – DeRagan

2

はいゼロヨン

あなたがしようとしているのはアンドロイドシェル01に 'logcat'コマンドをドロップすることです出力ストリームとしてコマンド出力を取得します。このlinkが役に立ちます。

1

"android.widget.Toast.makeText(Context context、CharSequence text、int duration)"を使用して、尋ねているようなことをします。いくつかの簡単なメッセージを画面に表示し、自動的に(最後のパラメータに基づいて)離れるようにする最も簡単な方法のようです。まあ

+0

本当に? Toastはメッセージ用であり、android.util.Logのようなログ出力のストリームではありません。 LENGTH_SHORTで10秒間に50回トーストしよう。あなたはトーストを次々に5分間見ています。また、あなたはandroid.util.Logからどのように読んでいますか? – garlicman

+0

投票をする前に質問を参照してください。彼はログメッセージを画面に印刷する方法を望んでいました。注意すべき点は、ログから読み込み、画面に書き込む方法ではなく、ログそのものをコードしているときに制御することでした。トーストを使用して彼のログをすべて書くことは提案していませんでしたが(明らかに良いアイデアではありません)、画面上にいくつかの重要なメッセージを表示したい場合は、ログキャスト以外のあなたの「より一般的な」ソリューションが表示されない限り、トーストの提案(ログキャットに加えて)。 –

+0

しました。 「彼はログメッセージをスクリーンに印刷する方法を望んでいた」いいえ、彼は画面にandroid.util.Logメッセージを印刷する方法を望んでいました。もしあなたがこれを自分で行う必要があるのであれば(これは私がこの質問に遭遇した理由です)、あなたはToastを提案していないでしょう。これはAppからLogを読むのを助けません。 android.util.Logに記録されるメッセージの種類。 Logは、Toastが代替デバッグツールであるところでデバッグする単なる方法ではありません。アプリのどこからでもトーストすることはできませんが、ログすることはできます。 -1も私のためにポイントを失う。この回答は役に立たない。 – garlicman

0

:-)

thisのlibを使用して画面上にあなたが欲しいものを記録するためのソリューションがあります。それは私のために働いていなかったので、私はそれの例を見つけることができる私自身のソリューションを開発here。それは本当に簡単です、ちょうど例えば、

package br.com.ideiageni.onscreenlogSample; 

import android.app.Activity; 
import android.graphics.Color; 
import android.os.Handler; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 


/** 
* Created by ariel on 07/07/2016. 
*/ 
    public class OnScreenLog { 
    private static int timeoutTime = 1000; 
    private static TextView tvLog; 
    private static int logCount = 0; 
    private static int logCountMax = 30; 
    private static String[] logs = new String[logCountMax]; 
    private static int cntClicks = 0; 
    private static boolean visibility = false; 
    private static Activity activity; 
    private int maxClicks = 5; 

    public OnScreenLog(){} 

    public OnScreenLog(Activity activity, int ViewID){ 
     OnScreenLog.activity = activity; 
     tvLog = new TextView(activity.getApplicationContext()); 
     maintainLog("Log is working"); 
     tvLog.setLayoutParams(new RelativeLayout.LayoutParams(
      RelativeLayout.LayoutParams.WRAP_CONTENT, 
      RelativeLayout.LayoutParams.WRAP_CONTENT)); 
     tvLog.setTextColor(Color.BLACK); 
     tvLog.setBackgroundColor(Color.LTGRAY); 
     tvLog.setAlpha((float) 0.4); 

     View v = null; 
     LinearLayout linearLayout; 
     RelativeLayout relativeLayout; 
     try { 
      linearLayout = (LinearLayout) activity.findViewById(ViewID); 
     } catch (ClassCastException e) {linearLayout = null;}; 

     try { 
      relativeLayout = (RelativeLayout) activity.findViewById(ViewID); 
     } catch (ClassCastException e) {relativeLayout = null;}; 
     if(linearLayout != null) { 
      linearLayout.addView(tvLog); 
      v = linearLayout; 
     } else if(relativeLayout != null) { 
      relativeLayout.addView(tvLog); 
      v = relativeLayout; 
     } 

     if(v != null) { 
      v.setOnTouchListener(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        switch (event.getAction()) { 
         case MotionEvent.ACTION_DOWN: 
          cntClicks++; 
          timerHandler.removeCallbacks(rTimeout); 
          timerHandler.postDelayed(rTimeout, timeoutTime); 

          if (cntClicks > maxClicks-1) { 
           setLogVisible(!visibility); 
           timerHandler.removeCallbacks(rTimeout); 
           cntClicks = 0; 
          } 
          break; 

        } 
        return false; 
       } 
      }); 
     } 

    } 

    public void log (String text){ 
     String logText = text; 
     maintainLog(logText); 
    } 

    public void log (int text){ 
     String logText = String.valueOf(text); 
     maintainLog(logText); 
    } 

    public void log (int[] text){ 
     StringBuilder builder = new StringBuilder(); 
     for (int i : text) { 
      builder.append(i); 
      builder.append("-"); 
     } 
     String logText = builder.toString(); 
     maintainLog(logText); 
    } 

    public void log (byte[] text){ 
     StringBuilder builder = new StringBuilder(); 
     for (int i : text) { 
      builder.append(i); 
      builder.append("-"); 
     } 
     String logText = builder.toString(); 
     maintainLog(logText); 
    } 

    private void maintainLog(String newText){ 
     String logText = ""; 
     if(logCount<logCountMax) logCount++; 
     for(int i=logCount-1; i>0; i--){ 
      logs[i] = logs[i-1]; 
     } 
     logs[0] = newText; 
     for(int i=0; i<logCount; i++){ 
      if(i<logCount-1) logText+=logs[i]+System.getProperty("line.separator"); 
      else logText+=logs[i]; 
     } 
     tvLog.setText(logText); 
    } 

    public void clearLog(){ 
     tvLog.setText(""); 
    } 

    public void setLogVisible(boolean visibility){ 
     if(visibility) tvLog.setVisibility(View.VISIBLE); 
     else tvLog.setVisibility(View.INVISIBLE); 
     OnScreenLog.visibility = visibility; 
    } 

    public static int getLogCountMax() { 
     return logCountMax; 
    } 

    public static void setLogCountMax(int logCountMax) { 
     OnScreenLog.logCountMax = logCountMax; 
     logs = new String[logCountMax]; 
    } 

    public int getMaxClicks() { 
     return maxClicks; 
    } 

    public void setMaxClicks(int maxClicks) { 
     this.maxClicks = maxClicks; 
    } 

    Handler timerHandler = new Handler(); 
    Runnable rTimeout = new Runnable() { 

     @Override 
     public void run() { 
      cntClicks = 0; 
     } 
    }; 
} 

その後、プロジェクトにクラスOnScreenLogを追加します。R.id.content_1は、あなたの活動のメインのLinearLayoutまたはRelativeLayoutの名前です

public class Activity1 extends AppCompatActivity { 

private OnScreenLog log; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_1); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    log = new OnScreenLog(this, R.id.content_1); 
    log.log("Started log on Activity 1"); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(), Activity2.class); 
      startActivity(intent); 
      log.log("Starting Activity 2"); 
      Snackbar.make(view, "Starting Activity 2", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
} 

を。

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/content_1" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="br.com.ideiageni.onscreenlogSample.Activity1" 
tools:showIn="@layout/activity_1"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Activity 1!" /> 

</RelativeLayout> 

どちらのソリューションは、現在のログメッセージを印刷するので、あなたはあなたの現在のログに今日ログインし、同じ情報をスクリーニングするためにログインするためにそれを伝える必要があります。

作業はまだ完了していませんが、必要のない人に使用できます。使用方法に関するいくつかの指示がありません。提案は大歓迎です。

関連する問題