我有一個C2DM接收器類,它在構造函數中初始化C2DM發送者電子郵件。 的事情是,我需要從資源字符串獲得發件人的電子郵件,因此我需要在構造背景下的接收器Android,如何在C2DMReceiver構造函數中獲取上下文?
接收器看起來像這樣
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">[email protected]_address</item>
因爲這是在資源字符串設定具體的應用程序可以設置這個值和模板會自動使用它。
如果您在圖書館項目中發現任何複雜情況以獲取上下文,可以將這些文件或包複製到您的項目中並根據需要進行更改。 – fargath 2012-04-23 11:54:05
沒有意識到可以完成,我可能只需要這樣做,但我真的不想,除非沒有其他選擇。感謝您的信息 – jamesc 2012-04-23 11:59:37
您打算如何處理不同發件人電子郵件的不同包裹?註冊C2DM時,您需要指定一個請求的發件人電子郵件以及您的應用程序包。該包由C2DM用於調用您的C2DMReceiver類(在清單中定義),您確定在您能夠在構造函數中正確設置電子郵件時正確調用此類嗎? – marmor 2012-04-30 07:55:35