3

我正在将 Android C2DM 添加到 Android 库项目中。我从JumpNoteChrome To Phone中包含的com.google.android.c2dm 包开始。为了使用这个包,您必须继承 C2DMBaseReceiver服务,该服务将 Sender Id 作为其构造函数的参数。在 JumpNote 中,此参数是使用配置类中的硬编码静态变量初始化的。但是,在一个可能由多个同时运行的应用程序使用的 Android 库项目中,我认为我不能使用硬编码的静态变量(也就是说,我相信当/如果多个应用程序试图访问/修改静态变量)。

我试图想办法在不使用静态变量的情况下初始化发件人 ID,但到目前为止我感到很困惑。

显而易见的解决方案是使用清单或资源字符串或两者的组合。例如,在 strings.xml 中,我可能有一个“ac2dmSender”字符串,它在 C2DMReceiver 服务声明的元数据子项中访问在清单中。但是,您似乎无法从静态上下文中获取对 PackageManager 或 ResourceManager 的引用,因此我无法以将元数据传递给 C2DMBaseReceiver 的构造函数的方式检索元数据。

请让我知道我错过了一些东西!提前致谢。

4

2 回答 2

3

我们有同样的问题。
我们通过使用资产文件夹下的属性文件来解决它。可以使用静态配置助手类静态加载属性。在第一次加载应用程序时,可以使用应用程序上下文获取属性文件。

例如: 1. 初始化静态配置 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myConfig = new WLConfig(getApplication());
}

  1. 然后在配置类中使用:myProperties.load(context.getAssets().open("myclient.properties"));

  2. 并获取发件人电子邮件:return myProperties.getProperty(WL_C2DM_SENDER)

于 2011-01-31T11:13:33.227 回答
1

但是,在一个可能由多个同时运行的应用程序使用的 Android 库项目中,我认为我不能使用硬编码的静态变量(也就是说,我相信当/如果多个应用程序试图访问/修改静态变量)。

“多个同时运行的应用程序”每个都有自己的静态变量副本,因为每个应用程序都在自己的进程中运行。

于 2010-10-19T00:28:02.910 回答