Android后台抓LOG

1. Monitor Service:

package com.rmicro.logutils;

import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.util.Log;

public class LogMonitorService extends Service {
	public static final String PackageName = "LogMonitorService ";// 自定义动作
	private ActivityManager am = null;

	private String LogPath = "/data/data/log.rmicro/";

	@Override
	public IBinder onBind(Intent arg0) {
		initVar();
		StartMonitor();
		return null;
	}

	/**
	 * 初始化变量
	 */
	private void initVar() {
		am = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
		TelephonyManager telephonyManager = (TelephonyManager) this
				.getSystemService(Context.TELEPHONY_SERVICE);
		String imei = telephonyManager.getDeviceId();
		if (avaiableMedia()) {
			LogPath = android.os.Environment.getExternalStorageDirectory()
					.getAbsolutePath() + "/" + imei + "Log.txt";
		} else
			LogPath = LogPath + imei + "Log.txt";
	}

	@Override
	public void onCreate() {
		initVar();
		Log.i("service----->", "start");
	}

	/**
	 * 开始监控
	 */
	private void StartMonitor() {
		Thread monitor = new Thread(new Runnable() {
			public void run() {
				// TODO Auto-generated method stub
				LogManagement.getInstance().Log(LogPath);
				try {
					Thread.sleep(1000);// 休眠一段时间
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		});
		monitor.start();// 启动监控线程
	}

	@Override
	public void onStart(Intent intent, int startId) {
		StartMonitor();
	}

	/**
	 * 判断SD卡是否存在
	 * 
	 * @return
	 */
	private boolean avaiableMedia() {
		String status = Environment.getExternalStorageState();
		if (status.equals(Environment.MEDIA_MOUNTED)) {
			return true;
		} else {
			return false;
		}
	}

}

2. LogManagement.java

package com.rmicro.logutils;
import java.util.ArrayList;

public class LogManagement {

	private static Process process;
	private static LogManagement instance = new LogManagement();

	public static LogManagement getInstance() {
		return instance;
	}

	/**
	 * 
	*/
	public void Log(final String Filename) {
		Thread th = new Thread(new Runnable() {

			public void run() {
				// TODO Auto-generated method stub
				getLog(Filename);

			}
		});
		th.start();
	}

	/**
	 * 捕获日志
	 */
	private void getLog(String Filename) {
		System.out.println("--------func start--------");
		try {
			ArrayList<String> cmdLine = new ArrayList<String>();
			cmdLine.add("logcat");
			cmdLine.add("-f");
			cmdLine.add(Filename);

			process = Runtime.getRuntime().exec(
					cmdLine.toArray(new String[cmdLine.size()]));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 停止将logcat日志文件输出到文件中
	 */
	public void StopLog() {
		try {
			process.destroy();
		} catch (Exception e) {

		}
	}
}

猜你喜欢

转载自blog.csdn.net/liaochaoyun/article/details/86663688