Android将应用调试log信息保存在SD卡的方法
把自己应用的调试信息写入到SD卡中。
packagecom.sdmc.hotel.util;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStreamReader;
importandroid.content.Context;
importandroid.os.Environment;
importandroid.util.Log;
/**
*log日志统计保存
*会打印i,e,w,不会打印d
*每次开启应用,就会把上次的log信息覆盖
*@authorway
*
*/
publicclassLogcatHelper{
privatestaticLogcatHelperINSTANCE=null;
privatestaticStringPATH_LOGCAT;
privateLogDumpermLogDumper=null;
privateintmPId;
/**
*
*初始化目录
*
**/
publicvoidinit(Contextcontext){
if(Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)){//优先保存到SD卡中
PATH_LOGCAT=Environment.getExternalStorageDirectory()
.getAbsolutePath()+File.separator+"miniGPS";
}else{//如果SD卡不存在,就保存到本应用的目录下
PATH_LOGCAT=context.getFilesDir().getAbsolutePath()
+File.separator+"miniGPS";
}
Filefile=newFile(PATH_LOGCAT);
if(!file.exists()){
file.mkdirs();
}
}
publicstaticLogcatHelpergetInstance(Contextcontext){
if(INSTANCE==null){
INSTANCE=newLogcatHelper(context);
}
returnINSTANCE;
}
privateLogcatHelper(Contextcontext){
init(context);
mPId=android.os.Process.myPid();
}
publicvoidstart(){
if(mLogDumper==null){
mLogDumper=newLogDumper(String.valueOf(mPId),PATH_LOGCAT);
}
Log.i("path",PATH_LOGCAT);///storage/sdcard0/miniGPS
mLogDumper.start();
}
publicvoidstop(){
if(mLogDumper!=null){
mLogDumper.stopLogs();
mLogDumper=null;
}
}
privateclassLogDumperextendsThread{
privateProcesslogcatProc;
privateBufferedReadermReader=null;
privatebooleanmRunning=true;
Stringcmds=null;
privateStringmPID;
privateFileOutputStreamout=null;
publicLogDumper(Stringpid,Stringdir){
mPID=pid;
try{
out=newFileOutputStream(newFile(dir,"GPS-"
+MyDate.getFileName()+".log"));
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
/**
*
*日志等级:*:v,*:d,*:w,*:e,*:f,*:s
*
*显示当前mPID程序的E和W等级的日志.
*
**/
//cmds="logcat*:e*:w|grep\"("+mPID+")\"";
//cmds="logcat|grep\"("+mPID+")\"";//打印所有日志信息
//cmds="logcat-sway";//打印标签过滤信息
cmds="logcat*:e*:i|grep\"("+mPID+")\"";//会打印i,e,w,不会打印d
}
publicvoidstopLogs(){
mRunning=false;
}
@Override
publicvoidrun(){
try{
logcatProc=Runtime.getRuntime().exec(cmds);
mReader=newBufferedReader(newInputStreamReader(
logcatProc.getInputStream()),1024);
Stringline=null;
while(mRunning&&(line=mReader.readLine())!=null){
if(!mRunning){
break;
}
if(line.length()==0){
continue;
}
if(out!=null&&line.contains(mPID)){
out.write((MyDate.getDateEN()+""+line+"\n")
.getBytes());
}
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(logcatProc!=null){
logcatProc.destroy();
logcatProc=null;
}
if(mReader!=null){
try{
mReader.close();
mReader=null;
}catch(IOExceptione){
e.printStackTrace();
}
}
if(out!=null){
try{
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
out=null;
}
}
}
}
}
系统权限
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.READ_LOGS"/>
时间工具类:
packagecom.sdmc.hotel.util;
importjava.text.SimpleDateFormat;
importjava.util.Date;
publicclassMyDate{
publicstaticStringgetFileName(){
SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");
Stringdate=format.format(newDate(System.currentTimeMillis()));
returndate;//2012年10月03日23:41:31
}
publicstaticStringgetDateEN(){
SimpleDateFormatformat1=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Stringdate1=format1.format(newDate(System.currentTimeMillis()));
returndate1;//2012-10-0323:41:31
}
}
方法的调用:
publicclassMyApplicationextendsApplication{
@Override
publicvoidonCreate(){
LogcatHelper.getInstance(this).start();
}
}