如何获得记录在运行时强制关闭在Android应用程序 [英] How to get log at run time when force close in Android application

查看:126
本文介绍了如何获得记录在运行时强制关闭在Android应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何获得记录在运行时强制关闭在Android应用程序。
我想获得的日志和寄出。

How to get log at run time when force close in Android application. I want to get logs and mail it.

推荐答案

下面一些code收集里面的应用程序日志:

Here some code to collect logs inside application:

    private int MAX_LOG_MESSAGE_LENGTH = 100000;
    private String[] mFilterSpecs;
    private String mFormat;
    private String mBuffer;

private class CollectLogTask extends AsyncTask<ArrayList<String>, Void, StringBuilder> {
    @Override
    protected void onPreExecute() {

    }

    @Override
    protected StringBuilder doInBackground(ArrayList<String>... params) {
        final StringBuilder log = new StringBuilder();
        try {
            ArrayList<String> commandLine = new ArrayList<String>();
            commandLine.add("logcat");//$NON-NLS-1$
            commandLine.add("-d");//$NON-NLS-1$
            ArrayList<String> arguments = ((params != null) && (params.length > 0)) ? params[0] : null;
            if (null != arguments) {
                commandLine.addAll(arguments);
            }

            Process process = Runtime.getRuntime().exec(commandLine.toArray(new String[0]));
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                log.append(line);
                log.append(LINE_SEPARATOR);
            }
        } catch (IOException e) {
            Log.e(TAG, "CollectLogTask.doInBackground failed", e);//$NON-NLS-1$
        }

        return log;
    }

    @Override
    protected void onPostExecute(final StringBuilder log) {
        if (null != log) {
            // truncate if necessary
            int keepOffset = Math.max(log.length() - MAX_LOG_MESSAGE_LENGTH, 0);
            if (keepOffset > 0) {
                log.delete(0, keepOffset);
            }

            if (mAdditonalInfo != null) {
                log.insert(0, LINE_SEPARATOR);
                log.insert(0, mAdditonalInfo);
            }
                          Log.d("printLog",log.toString());

        }
    }
}

现在调用这个类的异步这样。

Now call this async class like this.

    ArrayList<String> list = new ArrayList<String>();

    if (mFormat != null) {
        list.add("-v");
        list.add(mFormat);
    }

    if (mBuffer != null) {
        list.add("-b");
        list.add(mBuffer);
    }

    if (mFilterSpecs != null) {
        for (String filterSpec : mFilterSpecs) {
            list.add(filterSpec);
        }
    }

    new CollectLogTask().execute(list);

这篇关于如何获得记录在运行时强制关闭在Android应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆