-1

I am trying to send intent data to MainActivity.And i'm receiving the data from GCM Server, that received data I want to send to my MainActivity.

In GcmBroadcastReceiver Class

    ComponentName comp = new ComponentName(context.getPackageName(),
      GcmIntentService.class.getName());
    startWakefulService(context, (intent.setComponent(comp)));
    setResultCode(Activity.RESULT_OK);

    Bundle extras = intent.getExtras();
    Intent i = new Intent("CHAT_MESSAGE_RECEIVED");
    i.putExtra("Message", extras.getString("Message"));
    i.putExtra("Sender",extras.getString("Sender"));
    i.putExtra("Receiver",extras.getString("Receiver"));
    i.putExtra("Calltype",extras.getString("calltype"));
    context.sendBroadcast(i);

These above code I am using to receive the data from GCM Sever and also use the BroadcastReceiver to send data.

In MainActivity Class

registerReceiver(broadcastReceiver,newIntentFilter("CHAT_MESSAGE_RECEIVED"));
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override
    public void onReceive(Context context, Intent intent) {           
        Bundle b = intent.getExtras();
        String message = b.getString("Message");
        String sender=b.getString("Sender");
        String receiver=b.getString("Receiver");
    }
};

In activity I have used the broadcast receiver to receive the intent with data.

Narendra Baratam
  • 828
  • 1
  • 12
  • 26
Vigneshwaran T
  • 307
  • 2
  • 6
  • 18

3 Answers3

1
In your GcmListenerService # onMessageRecieved() function use this code
 Intent intent = new Intent(ANY_TAG);
        sendBroadcast(intent);

AND in your activity use following code

 private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            displayToast(" Data received");
        }
    };

 @Override
    public void onResume() {
        super.onResume();
        getContext().registerReceiver(mMessageReceiver, new IntentFilter(ANY_TAG));
    }

    @Override
    public void onPause() {
        super.onPause();
        getContext().unregisterReceiver(mMessageReceiver);
    }
Khizar Hayat
  • 3,427
  • 3
  • 18
  • 22
1

// Use observable object as an interface

public class ObservableObject extends Observable {
private static ObservableObject instance = new ObservableObject();

public static ObservableObject getInstance() {
    return instance;
}

private ObservableObject() {
}

public void updateValue(Object data) {
    synchronized (this) {
        setChanged();
        notifyObservers(data);
    }
}
}

// MainRecevier

public class MainReceiver extends        BroadcastReceiver 
 {
public final static String MAINRECEIVERSETALARM="ir.shes.schedule.MainReceiver.setalarm";
public final static String MAINRECEIVERSNOOZE="ir.shes.schedule.MainReceiver.snooze";

@Override
public void onReceive(Context p1, Intent p2)
{

    ObservableObject.getInstance().updateValue(p2);

}


}

// MainActivity

public class MainActivity extends Activity implements Observer 
{
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ObservableObject.getInstance().addObserver(this);
}
@Override
public void update(Observable observable, Object data) {        

    String action=((Intent)data).getAction();
    if (action.equals(MainReceiver.MAINRECEIVERSETALARM))
        app.eventCache.setAlarm();
    if (action.equals(MainReceiver.MAINRECEIVERSNOOZE))
        Toast.makeText(this, "snooze", Toast.LENGTH_LONG).show();
}
}

// static register receiver in AndroidManifest.xml

<receiver android:name="ir.shes.schedule.MainReceiver">
        <intent-filter>     

            <action android:name="ir.shes.schedule.MainReceiver.setalarm" />
            <action android:name="ir.shes.schedule.MainReceiver.snooze" />

        </intent-filter>

    </receiver>
0

Wondering if you have declared the BroadcastReceiver in AndroidManifest.xml.

<receiver android:name=".YourBroadCastReceiver" />
Dmitri Borohhov
  • 1,513
  • 2
  • 17
  • 33