ACRA在不退出应用

时间:2015-07-22 06:51:20

标签: android acra

刚开始使用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。退出应用程序的原因?解决?它获取了我需要的所有信息(以及更多)......

1 个答案:

答案 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); 

足够