ACRA自定义发件人待定报告

时间:2014-01-13 17:03:17

标签: android acra

我正在为Acra(https://github.com/ACRA/acra/wiki/AdvancedUsage#implementing-your-own-sender)设计自定义发件人,并且我试图确定当没有可用网络时ACRA的行为方式。据我所知(https://code.google.com/p/acra/issues/detail?id=11)如果没有互联网连接,ACRA将存储待处理报告,并在下次调用ACRA.init()时将其发送出去(可能是下一个应用程序启动)。我的问题是这可以与我的自定义发件人一起使用吗?

ACRA.init(this);
ACRA.getErrorReporter().setReportSender(new MyCustomSender());

这是在ACRA指南中描述的一般代码结构,但在查看问题11中的代码和描述时,我认为这不会使用我的自定义发件人,因为它仅在ACRA.init之后设置( )被称为,对吗?是否有其他缺少的机制可以正确处理此问题,以便仅使用我的自定义发件人而不是默认发件人发送待处理的报告?

2 个答案:

答案 0 :(得分:0)

不幸的是,看起来你是对的。

现在值得重新审视ACRA配置GoogleDocs不再是有效目标。一些更适合注入CustomSenders的东西。

修改ACRA以执行您想要的操作应该太难了。可能是对ErrorReport#setDefaultReportSenders的一个小改动。我肯定会感激地接受拉动请求。

答案 1 :(得分:0)

我意识到这个答案有点迟了。然而,这是我最后进行一些搜索的地方。

您可以使用自定义发件人通过此初始化发送待处理报告:

private void initACRA () {
    final ReportsCrashes rc = this.getClass()
            .getAnnotation(ReportsCrashes.class);
    if (rc == null) {
        return;
    }
    ACRA.init(this, new ACRAConfiguration(rc), false);
    ErrorReporter reporter = ACRA.getErrorReporter();
    reporter.setReportSender(new MyCustomSender());
    reporter.checkReportsOnApplicationStart();
}

如果没有网络连接/发送失败,请确保在自定义发件人中抛出ReportSenderException。如果报告未发送且报告文件(*-approved.stacktrace)仍然消失,请确保抓住任何RuntimeException并抛出ReportSenderExceptionRuntimeExceptionReportSenderException都会导致ACRA的日志输出相同,这不是最方便的解决方案。