У меня есть класс получателя 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, лучший способ предоставить конкретные константы приложения в библиотечном проекте?
Наконец, для полноты метод AppConstants.getC2DMSender выглядит следующим образом.
public static String getC2DMSender(Context c){
return c.getResources().getString(uk.co.the_prize_quiz.quiz_template.R.string.c2dm_sender);
}
Конкретное приложение, использующее эту библиотеку, отвечает за установку переменной c2dm_sender в ресурсе xml. Итак, чтобы получить эту переменную, мне нужен контекст
<item type="string" name="c2dm_sender" format="string">app_specific_registered_c2dm@email_address</item>
Поскольку это задается в строке ресурса, конкретное приложение может установить это значение, и шаблон будет использовать его автоматически.