Как отправить данные в текущую деятельность из Broadcast Receiver, - PullRequest
7 голосов
/ 20 декабря 2011

Я могу нормально получить сообщение C2DM, но хочу отправить данные в текущее действие, т. Е. Когда действие выполняется, если получатель получает сообщение C2DM, он должен отправить данные в текущее действие.Код получателя (в коде нет ошибок):

public class C2dmreceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        Log.w("C2DM", "Message Receiver called");
        if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) 
        {
            final String payload = intent.getStringExtra("key1");   
            Log.d("C2DM", "message = " + payload );
       }
     }}

Я пытался сделать это в упражнении, пытаясь зарегистрировать получателя в упражнении, чтобы получатель мог отправить данные и запуститьактивность может получать данные: -

C2dmreceiver c2dmr = new C2dmreceiver();
Registration.this.registerReceiver(c2dmr, new IntentFilter());

Я не знаю, что поместить в IntentFilter (), а также, что еще мне нужно ввести в код действия и код получателя, чтобычто во время выполнения действия и получения некоторого сообщения C2DM получатель может отправить данные в выполняемое действие.

Итак, скажите, пожалуйста, код, который должен быть включен в действие и в получатель, а также может быть в манифесте, чтобы данные из получателя могли быть отправлены для выполнения действия.

Любой совет высоко ценится.

1 Ответ

21 голосов
/ 20 декабря 2011

Прежде всего это не лучшая идея подписать приемник c2dm в действии.Сделай это в манифесте.Для передачи данных в действие вы можете создать статическое строковое поле в Activity и установить там String.

Вы можете сделать что-то вроде этого:

в Activity

public static YourActivity mThis = null;
@Override
protected void onResume() {
    super.onResume();
    mThis = this;
}
@Override
protected void onPause() {
    super.onPause();
    mThis = null;
}

В вашем BroadcastReceiver:

@Override
public void onReceive(Context context, Intent intent) {
...
if (YourActivity.mThis != null) {
    ((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm");
}
else {
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...