gpt4 book ai didi

Android,如何在 C2DMReceiver 构造函数中获取上下文?

转载 作者:行者123 更新时间:2023-11-29 16:14:52 25 4
gpt4 key购买 nike

我有一个 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>

因为这是在资源字符串中设置的,所以特定的应用程序可以设置这个值,模板将自动使用它。

最佳答案

将单例类添加到您的库中。有一个成员持有senderid和相应的getter和setter方法...

public class ClassicSingleton {
private static ClassicSingleton instance = null;
private String mSenderId = nulll; // Your data holder

protected ClassicSingleton() {
// Exists only to defeat instantiation.
}

public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}

/* Setter and Getter for the mAppContext member here */
public void setSender(String sender) {
mSenderId = sender;
}

}

在您应用的 Activity 中 ClassicSingleton.getInstance().setSender("SENDER_ID")

在您的 C2DM 类(class)中

public C2DMReceiver() {
super(ClassicSingleton.getInstance().getSender());
}

尝试将应用的上下文作为成员而不是 senderId。然后你可以提取你需要的任何资源我猜..让我知道。

关于Android,如何在 C2DMReceiver 构造函数中获取上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com