将Receiver数据发送到Activity

时间:2016-03-31 08:00:44

标签: android google-cloud-messaging android-broadcastreceiver

我想分享GCM从Receiver to Activity接收数据。如果Activity处于active / onResume / onPause状态,我想向活动显示数据。如果活动被破坏,那么我想在通知栏中显示该信息。

接收器 - > GcmMessageHandler.class

import android.os.Bundle;
import com.google.android.gms.gcm.GcmListenerService;

public class GcmMessageHandler extends GcmListenerService {

    @Override
    public void onMessageReceived(String from, Bundle data) {
        String message = data.getString("message");
        createNotification(message);
    }

    private void createNotification(String body) {
        String sendDataToActivity = body; // This is value i want to pass to activity
    }

}

活动 - > MainActivity.class

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    String RECEIVER_VALUE;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textView);

        textView.setText(RECEIVER_VALUE); // Here i want to set the receiver valiue
    }
}

这里是通知功能。

private void Notify(String notificationMessage){
      Notification notification = new Notification.Builder(getBaseContext())
            .setContentText(notificationMessage)    // Show the Message Here
            .setSmallIcon(R.drawable.ic_menu_gallery)
            .setWhen(System.currentTimeMillis())
            .build();

    notification.notify();
}

我已经在Activity中使用了从onNewIntent方法接收的意图。

来自Receiver的

- >

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message",message);
getApplicationContext().startActivity(intent);

来自活动 - >

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    String message =  intent.getExtras().getString("message").toString();
    textView.setText(message);
}

但问题是,如果我的活动接近,它会重新开启活动。除此之外的任何其他解决方

1 个答案:

答案 0 :(得分:1)

您可以像这样使用EventBus:

在您的Application类

@Override
public void onCreate() {
    super.onCreate();

    EventBus.builder()
            .logNoSubscriberMessages(false)
            .sendNoSubscriberEvent(false)
            .throwSubscriberException(false)
            .installDefaultEventBus();

}

在您的Activity上添加此方法,每次通过EventBus发布时都会调用此方法。

@Subscribe
public void onEventFromReceiver(ReceiverEvent event){
    Log.d(TAG, event.message);
}

在您的"发送数据到活动"方法

EventBus.getDefault().post(new ReceiverEvent(message));

您的ReceiverEvent类

public class ReceiverEvent {

    public final String message;

    public ReceiverEvent(String message) {
        this.message = message;
    }

}

这样,如果活动不可见或应用程序在后台,则不会发生任何事情。

这是EventBus项目

希望它有所帮助。