刚开始使用ACRA。当应用程序崩溃时,它会向我的服务器发送一个报告。一切都很好。
但是我可以捕获一些异常并让用户保持问题而不会出现错误 - 比如使用默认值。但我想在不打扰用户的情况下获得错误报告。但是当我这样做时:
ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleSilentException(null);
应用程序关闭。我首先尝试抛出一些错误(测试目的),我希望发送null
会阻止应用程序停止 - 我错了。
有没有办法在不退出应用程序的情况下使用ACRA发送错误报告?我以为我有它,但是
ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleException(null, false); // false is endApplication param, `null` seems to result in a NullPointerException
这也会关闭应用程序(ACRA没有额外的例外):
ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.putCustomData("test", "value");
errorReporter.handleException(new RuntimeException("message"), false); // tried `true` also, just in case
同时关闭应用
更新
(1)LogCat没有显示堆栈跟踪
(2)在阅读错误报告时,我的目光落在了
"DUMPSYS_MEMINFO":"Permission Denial: can't dump meminfo from from pid=1416, uid=10048 without permission android.permission.DUMP\n"
尝试将android.permission.DUMP
添加到androidmanifest.xml
,但我得到Permission is only granted to system apps
。退出应用程序的原因?解决?它获取了我需要的所有信息(以及更多)......
答案 0 :(得分:0)
事实证明,上面的代码是正确的。问题在于我覆盖了ErrorReporter
:
new HttpSender(org.acra.sender.HttpSender.Method.PUT, org.acra.sender.HttpSender.Type.JSON, null) {
@Override
public void send(final Context context, final CrashReportData report) throws ReportSenderException {
super.send(context, report);
respondAsIfCrashing(); // not the real method name
}
};
应用程序没有崩溃,因为respondAsIfCrashing
方法,它似乎就这样做了。
警告DUMPSYS_MEMINFO":"Permission Denial: can't dump meminfo from from pid=1416, uid=10048 without permission android.permission.DUMP
显然不是崩溃的理由......(也许只是不写信给设备?)
所以使用
ErrorReporter errorReporter = ACRA.getErrorReporter();
errorReporter.handleException(new RuntimeException("message"), false);
足够