我正在将Android C2DM添加到Android库项目中。我从com.google.android.c2dm package和JumpNote附带的Chrome To Phone开始。为了使用这个包,你必须继承C2DMBaseReceiver服务,它将Sender Id作为参数提供给它的构造函数。在JumpNote中,使用配置类中的硬编码静态变量初始化此参数。但是,在一个Android库项目中,可能被多个并发运行的应用程序使用,我认为我不能使用硬编码的静态变量(也就是说,我认为当多个应用程序尝试使用时,它可能会导致问题访问/修改静态变量。)
我试图想出一种在不使用静态变量的情况下初始化Sender Id的方法,并且到目前为止已经难倒了。
显而易见的解决方案是使用Manifest或Resource字符串或2的组合。例如,在strings.xml中我可能有一个“ac2dmSender”字符串,可以在元数据子元素中访问清单中的C2DMReceiver服务声明。但是,您似乎无法从静态上下文中获取对PackageManager或ResourceManager的引用,因此我无法以这样的方式检索元数据,以便将其传递给C2DMBaseReceiver的构造函数。
请让我知道我错过了什么!提前谢谢。
答案 0 :(得分:3)
我们遇到了同样的问题 我们通过使用assets文件夹下的属性文件解决了它。 可以使用静态配置帮助程序类静态加载属性。 在第一次加载应用程序时,可以使用Application上下文获取属性文件。
例如:
1.初始化静态配置
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
myConfig = new WLConfig(getApplication());
}
然后在配置类中使用: myProperties.load(context.getAssets()打开( “myclient.properties”));
并获取发件人电子邮件: 返回myProperties.getProperty(WL_C2DM_SENDER)
答案 1 :(得分:1)
然而,在一个Android库项目中,可能被多个并发运行的应用程序使用,我认为我不能使用硬编码的静态变量(也就是说,我相信它可能会导致多个应用程序出现问题正在尝试访问/修改静态变量。)
“多个并发运行的应用程序”每个都有自己的静态变量副本,因为每个变量都在自己的进程中运行。