如何在不使用静态变量中的硬编码值的情况下初始化Android C2DM的发件人ID?

如何在不使用静态变量中的硬编码值的情况下初始化Android C2DM的发件人ID?,android,push,android-c2dm,Android,Push,Android C2dm,我正在将安卓C2DM添加到安卓库项目中。我从和中包含的开始。为了使用这个包,您必须对服务进行子类化,该服务将发送者Id作为其构造函数的参数。在JumpNote中,此参数是使用配置类中硬编码的静态变量初始化的。然而,在一个Android库项目中,可能会被多个并发运行的应用程序使用,我认为我不能使用硬编码的静态变量(也就是说,我认为当/如果多个应用程序试图访问/修改静态变量时,可能会导致问题) 我试图想出一种不用静态变量就初始化发送者Id的方法,但到目前为止我还是被难住了 显而易见的解决方案是使用清

我正在将安卓C2DM添加到安卓库项目中。我从和中包含的开始。为了使用这个包,您必须对服务进行子类化,该服务将发送者Id作为其构造函数的参数。在JumpNote中,此参数是使用配置类中硬编码的静态变量初始化的。然而,在一个Android库项目中,可能会被多个并发运行的应用程序使用,我认为我不能使用硬编码的静态变量(也就是说,我认为当/如果多个应用程序试图访问/修改静态变量时,可能会导致问题)

我试图想出一种不用静态变量就初始化发送者Id的方法,但到目前为止我还是被难住了

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

请让我知道我错过了什么!提前谢谢

然而,在一个Android库项目中,可能会被多个并发运行的应用程序使用,我认为我不能使用硬编码的静态变量(也就是说,我认为当/如果多个应用程序试图访问/修改静态变量时,可能会导致问题)

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

我们遇到了相同的问题。
我们使用资产文件夹下的属性文件解决了这个问题。 可以使用静态配置帮助器类静态加载属性。 第一次加载应用程序时,可以使用应用程序上下文获取属性文件

例如: 1.初始化静态配置 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); myConfig=new-WLConfig(getApplication());
}

  • 然后在配置类中使用: 加载(context.getAssets().open(“myclient.properties”)

  • 并获取发件人电子邮件: 返回myProperties.getProperty(WL_C2DM_发送方)


  • 你认为我应该把静态设置为子类中需要的任何值?看起来很难看,但如果它不会引起问题,那就太好了!你的回答没有回答我的问题。然而,它确实为我的问题提供了一个解决方案,所以如果在接下来的几天里没有其他人有更好的想法,我会接受。@ajh158:“那么你认为我应该将静态设置为子类中需要的任何值?”——我没有这么说。我是专门针对你的静态问题。我还没有对GoogleC2DM代码进行足够的研究,对静态数据成员的使用没有任何意见。很抱歉对不起,我不是故意对你说的。我感谢你的回答,它帮助我考虑问题的新信息。我做了一些代码更改,这让我向前迈进,但我仍然在等待我的问题的答案——如果我没有得到答案,我仍然计划接受你的答案。