我有一个 C2DM 接收器类,它在构造函数中初始化 C2DM 发件人电子邮件。问题是,我需要从资源字符串中获取发件人的电子邮件,因此我需要在构造函数中为接收者获取上下文
接收器看起来像这样
public class C2DMReceiver extends C2DMBaseReceiver {
public C2DMReceiver() {
super(AppConstants.getC2DMSender(this)); // How do I get the context here?
}
@Override
public void onRegistered(Context context, String registrationId)
throws java.io.IOException { ...
C2DMBaseReceiver上的相关代码
public abstract class C2DMBaseReceiver extends IntentService {
...
private final String senderId;
/**
* The C2DMReceiver class must create a no-arg constructor and pass the
* sender id to be used for registration.
*/
public C2DMBaseReceiver(String senderId) {
// senderId is used as base name for threads, etc.
super(senderId);
this.senderId = senderId;
}
...
它与问题并不真正相关,但出于背景目的,需要这样做的原因是代码位于一个库项目中,该库项目用于许多 android 项目,每个项目都在资源文件中定义了自己的发件人电子邮件地址。AppConstants 类的任务是读取各种资源字符串,并从我接受的上一个问题的答案开始,Android, Best way to provide app specific constants in a library project?
最后为了完整性,AppConstants.getC2DMSender 方法看起来像这样
public static String getC2DMSender(Context c){
return c.getResources().getString(uk.co.the_prize_quiz.quiz_template.R.string.c2dm_sender);
}
使用此库的特定应用程序负责在 xml 资源中设置 c2dm_sender 变量。所以为了得到这个变量,我需要上下文
<item type="string" name="c2dm_sender" format="string">app_specific_registered_c2dm@email_address</item>
因为这是在资源字符串中设置的,所以特定应用程序可以设置此值,模板将自动使用它。