harisK92
harisK92

Reputation: 67

Sending data from GCMIntentService and receiving it in main activity

Hi I want to send a data from GCMIntentService to mine main activity and I want to receive it there?How can I achieve it ?

Iam pretty stuck with that In mine main activity I have list and I want to upadate it depending on received message.

public class GcmIntentService extends IntentService {


    public GcmIntentService() {
    super("GcmIntentService");
    }
    public static final String TAG = "GCM Service";

    @Override
    protected void onHandleIntent(Intent intent) {
    Bundle extras = intent.getExtras();
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
    // The getMessageType() intent parameter must be the intent you received
    // in your BroadcastReceiver.
    String messageType = gcm.getMessageType(intent);

    if (!extras.isEmpty()) {  // has effect of unparcelling Bundle
        /*
         * Filter messages based on message type. Since it is likely that GCM will be
         * extended in the future with new message types, just ignore any message types you're
         * not interested in, or that you don't recognize.
         */
        if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) {
            sendData("Send error: " + extras.toString());
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) {
            sendData("Deleted messages on server: " + extras.toString());
        // If it's a regular GCM message, do some work.
        } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
            // This loop represents the service doing some work.
            for (int i = 0; i < 5; i++) {
                Log.i(TAG, "Working... " + (i + 1)
                        + "/5 @ " + SystemClock.elapsedRealtime());
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                }
            }
            Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime());
            // Post notification of received message.
            sendData("Received: " + extras.toString());
            Log.i(TAG, "Received: " + extras.toString());
        }
    }
    // Release the wake lock provided by the WakefulBroadcastReceiver.
    GcmBroadcastReceiver.completeWakefulIntent(intent);
    }


    private void sendData(String msg) {

    //I want to send the data to main activity and Iam stuck here
    //should I use sendBroadcast and broadcast receiver or something else ?
     }
}

Upvotes: 1

Views: 1131

Answers (1)

BlaShadow
BlaShadow

Reputation: 11693

To do that you need first override the method on you activity onNewIntent and change the launch mode of your activity.

manifest.xml

android:launchMode="singleTop"

On you service

Intent intent = new Intent(context, YourActivityClass.class);

// This make the magic 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

//add some data extra
intent.putExtra("data","from outside");

getApplicationContext().startActivity(intent);

on you activity

@Override
protected void onNewIntent(Intent intent) {

}

Upvotes: 2

Related Questions