2012-06-01 82 views
2

我正在使用ACRA woth我的android應用程序。我的問題是,當發生崩潰時,如何確保在報告崩潰之前執行一些代碼。我的意思是我想在崩潰發生時添加一些自定義變量,以便知道應用程序處於什麼狀態?ACRA與android:如何執行崩潰前的代碼報告

請幫

謝謝

回答

2

描述here實現自己的發件人。它可以簡單地包圍一些現有的發件人,並在那裏轉發發送功能。

在發件人代碼中,您可以在實際發送報告之前執行任何特殊操作。

+0

PErfect!謝謝 – Snake

1

這就是使用ACRA 4.5.0和HttpSender後端的工作。我在Cloudant上使用Acralyzer。

原始代碼:

@ReportsCrashes(
    mode = ReportingInteractionMode.DIALOG, 
    resDialogText = R.string.crash_dialog_text, 
    resDialogCommentPrompt = R.string.crash_dialog_comment_prompt, 

    formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report", 
    formUriBasicAuthLogin="[restricted reporter login]", 
    formUriBasicAuthPassword="[restricted reporter password]", 
    reportType = org.acra.sender.HttpSender.Type.JSON, 
    httpMethod = org.acra.sender.HttpSender.Method.PUT, 

    formKey = "" 
) 

public class Application extends android.app.Application { 

    public void onCreate() { 
     super.onCreate(); 
     ACRA.init(this); 

我的應用程序保持與日誌消息內存中的循環緩衝器。這不會寫入磁盤,並且我不特別想將其呈現爲字符串,並且每次添加條目時都會調用putCustomData()。相反,我調用我的靜態「自卸車」方法VPNLog.dumpLast(),在HttpSender.send()運行之前修改報告。新代碼如下所示:

@ReportsCrashes(
    mode = ReportingInteractionMode.DIALOG, 
    resDialogText = R.string.crash_dialog_text, 
    resDialogCommentPrompt = R.string.crash_dialog_comment_prompt, 

    formUri = "https://kpc.cloudant.com/acra-openconnect/_design/acra-storage/_update/report", 
    formUriBasicAuthLogin="[restricted reporter login]", 
    formUriBasicAuthPassword="[restricted reporter password]", 
    // reportType and httpMethod are now defined below 

    formKey = "" 
) 

public class Application extends android.app.Application { 

    public void onCreate() { 
     super.onCreate(); 
     ACRA.init(this); 
     ACRA.getErrorReporter().setReportSender(
      new HttpSender(org.acra.sender.HttpSender.Method.PUT, 
          org.acra.sender.HttpSender.Type.JSON, 
          null) { 

       @Override 
       public void send(CrashReportData report) throws ReportSenderException { 
        report.put(ReportField.APPLICATION_LOG, VPNLog.dumpLast()); 
        super.send(report); 
       } 

      }); 

我要添加的值是一長(100+行)字符串; Acralyzer正確地將其分成獨立的編號行。

另一種選擇是填充ReportField.CUSTOM_DATA具有多個鍵/值對:

report.put(ReportField.CUSTOM_DATA, "key0=value0\nkey1=value1\n"); 

Acralyzer將在一個HTML表顯示這些。

+0

謝謝。這太棒了! –