Android应用程序强制关闭时如何在运行时获取日志

2024-02-03

如何在 Android 应用程序中强制关闭时在运行时获取日志。 我想获取日志并邮寄。


这里有一些用于收集应用程序内部日志的代码:

    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());

        }
    }
}

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

    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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android应用程序强制关闭时如何在运行时获取日志 的相关文章

  • 通过代码在创建时突出显示 ListView 项目

    我想在创建 listView 时突出显示 ListView 的第一行 0 我尝试了不同的方法 就像您在注释代码中看到的那样 但没有任何效果 这很奇怪 因为 OnItemClickListener 中的突出显示工作正常 它通过 xml 选择器
  • 升级到最新支持库后Android JACK编译器错误

    Android Studio 2 2 3 Windows 10 64位 构建工具版本 25 Android Gradle插件版本2 2 3 升级到最新的支持库 从 23 4 0 到 25 1 0 并更改编译版本 从 23 到 25 后 我收
  • Android ToggleButton 始终检查

    如果切换按钮处于选中或取消选中状态 我想存储在 SharedPreferences 中 toggle setOnCheckedChangeListener new OnCheckedChangeListener public void on
  • 使用同一个侦听器的多个活动

    我有 4 个活动 它们都包含一个 xml 页脚 其中包含 4 个按钮 每个活动一个 我现在想为这些按钮设置 onclicklistener 它是页脚中的自制菜单 问题是 如何使用侦听器以便重用代码 我有两个想法 创建一个实现 onclick
  • 我无法再在后台应用程序中接收任何 FCM 消息

    当应用程序处于后台时 我无法再在应用程序中接收任何数据消息 请注意 直到最近它在我的应用程序中都运行良好 也许在我的开发环境最近更新后它停止工作了 我不能说 所以我尝试用快速入门 android 项目 https github com fi
  • 无法在 Android Studio 中导出签名的 APK

    当我使用keytool list keystore path to keyfile jks并提供我的密码 我可以看到那里的条目 但是当我在尝试使用相同的密码生成签名的 APK 时使用相同的密码时 我收到错误 无法加载密钥库 密钥库被篡改 或
  • 当我单击“完成”键时,Android OnEditorActionListener() actionId 给出 0

    我创建了一个键盘 当用户输入数字时 它会输入特定的 EditText 但是当用户单击Done关键 它没有去setOnEditorActionListener但它关闭了键盘 这是我的代码 final EditText txtQty new E
  • 蓝牙 BLE Android 以最大吞吐量写入外设

    我们公司开发了一个具有蓝牙 BLE 的硬件单元 并且我们在 Nexus 7 2013 中有一个服务应用程序 我们希望使用它向该单元发送固件文件 文件最大可达 500kb BT芯片是德州仪器CC2540 我浏览了大量的页面 并扫描了 Stac
  • 写入 Android UI Automator 输出控制台

    我正在 Android UI Automator 上编写一个小包装器 通常我们可以在控制台看到测试用例的状态 我可以访问它并添加我自己的消息吗 我努力了System out println 但这没有用 有什么办法可以做到这一点吗 您可以使用
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • Toast 消息消失后​​完成活动吗?

    有谁知道 是否有可能对 Toast 消息执行某些操作 在我的情况下完成活动 将被关闭 您只需创建一个Thread持续时间只要Toast显示 然后您就可以完成您的Activity public void onCreate Bundle sav
  • FragmentActivity 无法解析为类型

    我正在尝试来自的应用程序这个博客 http android developers blogspot com 2011 02 android 30 fragments api html 在延长的同时FragmentActivity 我收到以下
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • Android Google Map V2:如何在单击另一个标记时更改先前单击的标记的图标

    更新 我通过添加 previousMarker 对象解决了性能问题 因此 只有先前单击的标记将被删除并替换为默认图标 但是 当我单击标记时 信息窗口仍然不显示 我有一个地图视图并在上面设置了一些标记 我想要的是 当我单击一个标记时 它将其图
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 使 Recyclerview 固定高度并可滚动

    已解决以下检查答案 所以我试图为我的 Android 应用程序创建评论功能 我想在 recyclerview 中显示评论 然后在 recyclerview 下方有一个按钮和文本视图来添加评论 我想让 recyclerview 具有一定的高度
  • 我想测量 ListView 的高度 (getHight() = 0)

    我无法自己决定任务将是问 我想测量 ListView 的高度 无法捕捉渲染 ListView 的时刻 rssListView getHight 0 public class RSSactivity extends Activity publ

随机推荐

  • 查明函数是否被调用

    我正在用Python编程 我想知道是否可以测试我的代码中是否调用了函数 def example pass example Pseudocode if example has been called print foo bar 我该怎么做 如
  • CastleWindsor 3.0 和 DefaultServiceHostFactory.RegisterContainer()?

    以下内容无法编译 DefaultServiceHostFactory RegisterContainer Container Kernel Castle 3 0 中似乎不存在静态方法 我检查了 Breakingchanges txt 但没有
  • 使用 Pandas 读取数据(.dat 文件)

    如何使用 Pandas 读取以下 两列 数据 来自 dat 文件 TIME XGSM 2004 006 01 00 01 37 600 1 2004 006 01 00 02 32 800 5 2004 006 01 00 03 28 00
  • 防止 dblclick 事件触发时触发 click 事件

    我正在处理 DOM 元素上的 click 和 dblclick 事件 每个执行不同的命令 但我发现当双击元素时 除了触发双击事件之外 还触发了两次单击事件 防止这种行为的最佳方法是什么 万一其他人偶然发现这个问题 就像我一样 寻找答案 我能
  • Angular 8 和 9 中提供和注入“Window”与 Window 之间有什么区别?

    我有两个使用这些版本的 Angular 项目 9 0 0 下一个 6 8 1 0 在版本 9 中我用它来提供和注入window目的 NgModule providers provide Window useValue window expo
  • 使用 Java 重命名文件

    我们可以重命名一个文件吗test txt to test1 txt If test1 txt存在会重命名吗 如何将其重命名为已经存在的 test1 txt 文件 以便将 test txt 的新内容添加到其中以供以后使用 复制自http ex
  • 从 ELF 目标文件转储 C 结构大小

    如何使用调试符号从 ELF 目标文件中提取所有 C 结构的大小 可以使用 print sizeof some struct 从 GDB 获取各个结构大小 但我需要的是获取所有结构的列表 我查看了 nm 和 objdump 但没有看到执行我正
  • MongoDB“无法找到 $geoNear 查询的索引”

    我只是想得到一个简单的near查询工作 这是我的文档的示例 point type Point coordinates 30 443902444762696 84 27326978424058 created on date 13980167
  • 在 R Markdown 模板中包含图像,无需为模板创建新目录

    我正在构建一个投影仪演示模板 我想在幻灯片的前面添加一个徽标 尽管这可以通过在演示文稿目录中包含图像来实现 但我不希望只为该图像的每个新演示文稿创建一个新目录 有没有一种方法可以从包内检索相对文件路径resources文件夹并让它引用 La
  • 为什么套接字可以 connect() 到它自己的临时端口?

    我可以可靠地获得 Winsock 套接字connect 如果我使用自动分配的临时端口 5000 65534 范围内的端口连接到本地主机 具体来说 Windows 似乎有一个系统范围的滚动端口号 这是它将尝试分配为客户端套接字的本地端口号的下
  • 使用 std::string 键提升共享内存中的无序映射

    是否可以在共享内存上使用 std string 或其他复杂结构键类型以及 boost 无序映射 如果是这样 我可以找到一些示例代码吗 我找到了一些在共享内存上使用无序映射的示例代码 但无法将键类型更改为复杂结构 谢谢 Yes 您可以在此处查
  • 如何向初学者描述面向对象编程?现实世界有一个很好的类比吗?

    我的姐夫是一名大学工程专业的新生 他之前没有编程经验 他正在课堂上学习编程 但他似乎在基本概念上遇到了困难 更糟糕的是 他似乎是所有班级中唯一没有编程背景的人 他在 Matlab 上做得很好 我不知道 然后当他学习 Python 基础知识时
  • Cytsocape.js 无法使用不存在的目标创建边缘

    在使用 AJAX 请求创建节点后 我尝试创建边缘 My code success function data each data kids function i value cy add group nodes data id value
  • 从 QML 访问 QStandardItemModel 的项目

    已编辑 在原始问题中 我错误地假设 GridView 本机使用二维模型 事实上 它与其他 QML 类似 需要一个元素列表 意见 为了使问题和答案更容易理解 我更改了给定的代码 轻微地 此外 我根据答案添加了工作解决方案 在主程序中 我定义了
  • Win32 LB_GETTEXT 返回垃圾

    我有一个问题 很可能是一个简单的问题 但对我来说仍然是一个问题 我在 Win32 C 中使用列表框 当从列表框中获取选定的文本时 返回的字符串只是垃圾 它是结构或类似结构的句柄 下面是代码和我得到的示例 std string Listbox
  • 在heroku上管理多个ssh密钥

    所以我有几个 ssh 密钥用于我拥有的其他帐户 我现在需要能够在我的计算机上克隆 heroku 存储库 我创建了一个新的 ssh 密钥并使用 heroku keys add 将其添加到我的 heroku 帐户 但是 当我尝试克隆存储库时 我
  • 无法在 Docker Compose 中向非 root 用户授予对 Docker 卷的写入权限

    我正在运行一个 Docker Compose 环境 在其中执行一系列 Selenium 测试 为了做到这一点 我正在使用Selenium 提供的图像 https github com SeleniumHQ docker selenium 我
  • 函数导致自动生成的 RcppExports.R 检查错误

    我正在使用 Rcpp 0 12 11 和 R 3 4 0 当我将 Rcpp 升级到 0 12 11 时 由 Rcpp compileAttributes 自动生成的 R 文件 RcppExports R 开始为我提供略有不同的函数调用 ru
  • VS2013中cshtml窗口垂直分割

    在VS2013中我想查看相同的cshtml文件并排在 2 个窗口中 即垂直分割 我知道如何进行水平分割 但这不是我在这里追求的 通常的方法是复制选项卡 WINDOW New Window 文件 然后创建一个新的垂直选项卡组 但是 我找不到复
  • Android应用程序强制关闭时如何在运行时获取日志

    如何在 Android 应用程序中强制关闭时在运行时获取日志 我想获取日志并邮寄 这里有一些用于收集应用程序内部日志的代码 private int MAX LOG MESSAGE LENGTH 100000 private String m