Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android将应用调试log信息保存在SD卡的方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

把自己应用的调试信息写入到SD卡中。

package com.sdmc.hotel.util;
import java.io.bufferedReader; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FiLeoutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import android.content.Context; 
import android.os.Environment; 
import android.util.Log;
/** 
* log日志统计保存 
* 会打印i,e,w,不会打印d
* 每次开启应用,就会把上次的log信息覆盖 
* @author way 
* 
*/ 
public class LogcatHelper { 
private static LogcatHelper INSTANCE = null; 
private static String PATH_LOGCAT; 
private LogDumper mLogDumper = null; 
privatE int mPId; 
/** 
* 
* 初始化目录 
* 
* */ 
public void init(Context context) { 
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"; 
} 
File file = new File(PATH_LOGCAT); 
if (!file.exists()) { 
file.mkdirs(); 
} 
} 
public static LogcatHelper geTinstance(Context context) { 
if (INSTANCE == null) { 
INSTANCE = new LogcatHelper(context); 
} 
return INSTANCE; 
} 
private LogcatHelper(Context context) { 
init(context); 
mPId = android.os.process.myPid(); 
} 
public void start() { 
if (mLogDumper == null){ 
mLogDumper = new LogDumper(String.valueOf(mPId),PATH_LOGCAT); 
}
Log.i("path",PATH_LOGCAT);///storage/sdcard0/miniGPS
mLogDumper.start(); 
} 
public void stop() { 
if (mLogDumper != null) { 
mLogDumper.stopLogs(); 
mLogDumper = null; 
} 
} 
private class LogDumper extends Thread { 
private Process logcatProc; 
private BufferedReader mReader = null; 
private Boolean mRunning = true; 
String cmds = null; 
private String mPID; 
private FiLeoutputStream out = null; 
public LogDumper(String pid,String dir) { 
mPID = pid; 
try { 
out = new FiLeoutputStream(new File(dir,"GPS-" 
+ MyDate.getFilename() + ".log")); 
} catch (FileNotFoundException E) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
/** 
* 
* 日志等级:*:v,*:d,*:w,*:e,*:f,*:s 
* 
* 显示当前mPID程序的 E和W等级的日志. 
* 
* */ 
// cmds = "logcat *:e *:w | grep \"(" + mPID + ")\""; 
// cmds = "logcat | grep \"(" + mPID + ")\"";//打印所有日志信息 
// cmds = "logcat -s way";//打印标签过滤信息 
cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";//会打印i,e,w,不会打印d 
} 
public void stopLogs() { 
mRunning = false; 
} 
@Override 
public void run() { 
try { 
logcatProc = Runtime.getRuntime().exec(cmds); 
mReader = new BufferedReader(new InputStreamReader( 
logcatProc.geTinputStream()),1024); 
String line = 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 (IOException E) { 
e.printStackTrace(); 
} finally { 
if (logcatProc != null) { 
logcatProc.destroy(); 
logcatProc = null; 
} 
if (mReader != null) { 
try { 
mReader.close(); 
mReader = null; 
} catch (IOException E) { 
e.printStackTrace(); 
} 
} 
if (out != null) { 
try { 
out.close(); 
} catch (IOException E) { 
e.printStackTrace(); 
} 
out = null; 
} 
} 
} 
} 
} 

系统权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_LOGS" /> 

时间工具类:

package com.sdmc.hotel.util;
import java.text.SimpleDateFormat; 
import java.util.Date; 
public class MyDate { 
public static String getFilename() { 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 
String date = format.format(new Date(System.currentTimeMillis())); 
return date;// 2012年10月03日 23:41:31 
} 
public static String getDateEN() { 
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String date1 = format1.format(new Date(System.currentTimeMillis())); 
return date1;// 2012-10-03 23:41:31 
} 
}

方法调用

public class MyApplication extends Application { 
@Override 
public void onCreate() { 
LogcatHelper.geTinstance(this).start(); 
} 
} 

大佬总结

以上是大佬教程为你收集整理的Android将应用调试log信息保存在SD卡的方法全部内容,希望文章能够帮你解决Android将应用调试log信息保存在SD卡的方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:androidlog