Android - 获取Logcat中用户打印的Log数据

前言:

注意:本文展示的是获取到你自己打印的在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;

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值