如何从动态壁纸中使用ACRA?

时间:2011-11-08 15:40:40

标签: android live-wallpaper

我有一个不时崩溃的动态壁纸,我想收集整合ACRA(http://code.google.com/p/acra/)以在谷歌电子表格中生成和收集碰撞报告的好处。

但是我无法将ACRA整合到我的动态壁纸中。这是我到目前为止所尝试的:

  1. 遵循基本设置指南(http://code.google.com/p/acra/wiki/BasicSetup
  2. ACRA.init(WallpaperService.getApplication());
  3. 中的WallpaperService.onCreate()初始化了ACRA
  4. 使用@ReportsCrashes(formKey = "dFhXY3Y4N2NXXXXXXXXwM1g3Z1FZUVE6MQ", mode = ReportingInteractionMode.TOAST, forceCloseDialogAfterToast = false, resToastText = R.string.crash_text_toast)
  5. 注释WallpaperService

    当我构建和部署应用程序时,它只会像以前一样崩溃,并且ACRA未启用。

    似乎问题源于ACRA期望对Application的子类进行注释这一事实。

    我正在为Android 2.1-update编译我的应用程序并使用最新版本的ACRA(截至目前为4.23),并在带有android 2.3.4的手机上运行。

    非常欢迎任何帮助!

2 个答案:

答案 0 :(得分:1)

我错过了一个基本事实,即Android动态壁纸可以有一个可选类,扩展了从AndroidManifest.xml引用的android.app.Application。

使用此类是将ACRA包含在壁纸中的最佳方式,因为它允许ACRA在壁纸的生命周期中尽早开始。

只需在项目中创建一个扩展android.app.Application的类,并从清单的application元素中的android:name属性中命名。实施例。

在你的清单中:

<application
 android:debuggable="true"
 android:icon="@drawable/icon"
 android:label="@string/app_name"
 android:name=".MyApplication" >

在MyApplication.java中:

package com.mycompany.myapp;

import org.acra.ACRA;
import org.acra.ReportingInteractionMode;
import org.acra.annotation.ReportsCrashes;

@ReportsCrashes(resDialogIcon = R.drawable.icon, resToastText = R.string.crash_text_toast, formKey = "dFhXY3YXXXXXXXXXXXXXXZUVE6MQ", mode = ReportingInteractionMode.TOAST, forceCloseDialogAfterToast = false)
public class MyApplication extends android.app.Application {
    @Override
    public void onCreate() {
        ACRA.init(this);
        super.onCreate();
    }
}

答案 1 :(得分:0)

我进一步研究了这一点,发现每版4.2.3的ACRA不支持动态壁纸。我决定修补它以添加此支持。该补丁可以在this thread中找到。

以下是一个小小的总结:

  1. 根据上面链接中的主题,修补ACRA以支持init()中的第二个参数。
  2. 注释WallpaperService类,就像按ACRA documentation注释Application类一样。
  3. 使用WallpaperService的init()方法中的新onCreate()函数初始化ACRA,如下所示:ACRA.init(getApplication(),this);
  4. 我仍然没有对此进行过彻底的测试,并且可能存在很多错误。但至少这是一个开始。我现在在电子表格中得到一个祝酒词和一些数据而不是讨厌的力量退出吐司。