Показывать сообщения журнала на экране для приложения Android

Можно ли отображать сообщения журнала (которые я печатаю с помощью android.util.Log ) на экране в приложении для Android?

Есть ли другой лучший способ просто выводить строки на экран?

Что-то вроде System.out.println ?

Solutions Collecting From Web of "Показывать сообщения журнала на экране для приложения Android"

Как и другие, вы можете использовать log cat. Если вы используете эмулятор или отлаживаете устройство, вы можете использовать adb logcat для просмотра сообщений. В перспективе отладки Eclipse есть окно, которое сделает это за вас.

Другой способ, без приложения отладчика, – использовать приложение CatLog – Logcat Reader .

редактировать

Я думаю, что у нас есть несколько фреймворков, доступных на Android. Проверьте эти ссылки и посмотрите, работает ли это для вас

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/

Да нуль4

То, что вы пытаетесь сделать, это сбросить «logcat» comand на shell android и получить команду output в качестве выходного потока. Эта ссылка вам поможет.

Я использую «android.widget.Toast.makeText (контекст контекста, текст CharSequence, int duration)», чтобы сделать что-то вроде того, что вы просите. Кажется, это самый простой способ получить некоторые быстрые сообщения на экране и заставить его уйти автоматически (на основе последнего параметра).

🙂

Ну, есть решение для регистрации всего, что вы хотите на экране, с помощью этой библиотеки. Это не сработало для меня, поэтому я разработал свое собственное решение, и вы можете найти его пример. Это действительно просто, просто добавьте класс OnScreenLog в свой проект

 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; } }; } 

То, например:

 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(); } }); } 

Где R.id.content_1 – это имя основного LinearLayout или RelativeLayout вашей деятельности.

 <?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> 

Ни одно из решений не печатает текущие сообщения журнала, поэтому вам нужно будет сообщить ему, чтобы он регистрировал те же самые данные, которые вы регистрировали сегодня в своем текущем журнале.

Работа еще не закончена, но может быть использована для всех, кто в ней нуждается. Отсутствуют некоторые указания по использованию. Предложения приветствуются.