前言:
注意:本文展示的是获取到你自己打印的在Logcat中Log的内容,比如你打印了100个同一TAG的运行日志,这时候你可能就要用到获取到每一个Log的数据的东西
最近有个问题就是要获取到蓝牙打印的日志数据内容并发送到后台,日志信息基本上都是同一个类的,所以只需要监听Log的Tag名称就可以。
这个方法不用保存在本地什么的,百度上找的用不上
实现步骤
一、创建LogService类
public class LogService extends Service {
private static final String TAG = "LogService";
private LinkedList<LogLine> logList = new LinkedList<LogLine>();
private final int MAX_LINE = 500;
private Thread readLog;
private boolean isAllowReadLog = true;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
//Utility.LOG_TAG 为自定义的logString,service会读取此log
readLog = new Thread(new logReaderThread("你要拦截的TAG名称,TAG知道啥意思吧"));
readLog.start();
isAllowReadLog = true;
return START_STICKY;
}
class logReaderThread implements Runnable {
private final String filter;
public logReaderThread(String filter) {
this.filter = filter;
}
@Override
public void run() {
Process mLogcatProc = null;
BufferedReader reader = null;
try {
mLogcatProc = Runtime.getRuntime().exec(new String[]{"logcat", filter + " *:S"});
reader = new BufferedReader(new InputStreamReader(mLogcatProc.getInputStream()));
String line;
while (isAllowReadLog) {
if ((line = reader.readLine()) != null) {
Message msg = new Message();
msg.obj = line;
handler.sendMessage(msg);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
//数据返回在这里 msg.obj.toString()
buildLogLine(msg.obj.toString());
}
};
private void buildLogLine(String line) {
LogLine log = new LogLine();
log.time = DateUtil.getTodayDateTime() + ": ";
if (line.contains(")")) {
line = line.substring(line.indexOf(")") + 1, line.length());
}
log.content = line;
Log.e(TAG, line);
publishmessageplus(mqttPubTopic, line);
while (logList.size() > MAX_LINE) {
logList.remove();
}
}
@Override
public void onDestroy() {
isAllowReadLog = false;
super.onDestroy();
}
}
二、AndroidManifest.xml 中注册 LogService(已经自动注册了就不用重复步骤)
<service android:name=".service.LogService" android:enabled="true" android:exported="false" />
三、启用 在你需要开启的地方这样写
Intent startIntent = new Intent(this, LogService.class); startService(startIntent);
四、补上LogLine类
public class LogLine { public String time; public String content; public int color; }