如何在Android应用程序崩溃时添加“发送反馈”选项?这个选项可以在谷歌自己的应用程序中看到,这里是星巴克的一个例子 .
这个问题有许多非常古老的答案,涉及以编程方式创建这样的东西 . 他们似乎过度参与了这个节目 .
我很惊讶没有一个简单的方法来实现这个,而不是试图 grab 整个应用程序 . 这可以简单地启用,例如通过在Google Play商店控制台上启用选项或向清单添加内容?
我无法在Android或Play商店文档中找到有关如何执行此操作的数据 .
Update: 我们正在使用Crashlytics / Fabric作为我们的崩溃报告库
此图显示Android 6.0上的默认行为 .
和8.0:
4 回答
Android平台将为您完成此操作 . 您无需添加任何其他代码 . 尝试从您的应用中抛出异常 . 你应该看到这个 .
见https://android-developers.googleblog.com/2010/05/google-feedback-for-android.html
将应用程序发布到Playstore后,将显示“发送反馈”选项 . 我认为您无法看到它,因为您正在测试的应用程序是未直接从Playstore下载的应用程序版本,例如:使用debug keystore签名的应用程序 .
没有办法“试试整个应用程序” .
有很多种crash reporting libraries for Android,其中一些(例如ACRA)将支持您的反馈选项 . 实施崩溃报告器有点棘手,因为当您崩溃时应用程序的进程处于不稳定状态,这就是我们为此目的测试和调试库的原因 .
作为将清单添加到应用程序的一部分,库将向清单添加内容 .
有很多库可以做到这一点,但是如果你像我一样并且不喜欢通用库的开销来完成这么简单的任务,那么你自己就很容易做到 .
以下是让您前往的几个步骤:
1)添加一个扩展Application的类(如果你还没有) .
2)在onCreate中使用
Thread.setDefaultUncaughtExceptionHandler
设置自定义UncoughtExceptionHandler .3)在自定义处理程序中,使用带有
Intent.FLAG_ACTIVITY_NEW_TASK
标志的intent启动活动 . 对于此活动,在清单中添加android:process=":crash"
属性(crash
可以是您想要的任何内容) . 此步骤将确保新活动将在另一个进程上启动(这很重要,因为旧的活动已崩溃,现在处于堆栈回滚过程中,因为异常) .4)在这项活动中,做任何你需要的事情 . (提供崩溃报告所需的UI,和/或向自己发送电子邮件) . JavaMail适用于静默电子邮件 .
注意:在UncaughtExceptionHandler中,您将获得崩溃的线程和异常 . 您可以使用以下命令轻松提取堆栈跟踪:
final StringWriter stackTrace = new StringWriter(); exception.printStackTrace(new PrintWriter(stackTrace));
和/或在需要时提取线程名称,并使用intent的bundle将它们发送到活动 .希望这可以帮助
只需使用Fabric和他们的Crashlytics平台 - 这将标记在不涉及用户输入的情况下检测到的任何崩溃 . 它会在检测到任何崩溃时自动通知您,并将识别特定问题,包括堆栈跟踪和版本控制 . 这是他们与平台相关的许多其他有用功能的补充 - 他们在过去几个月中一直在使用该平台来分析我的25个应用程序,并发现它非常有效地识别和修复已出现的任何问题 .