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) {
}
}
}