How to destroy MainActivity first and start it again after receiving notification
Hi I am working on an android application where I am using GCM concept. After the app receives a notification, then click the "I am starting MainActivity" button.
If MainActivity is already running, and the application receives a notification, then the already running MainActivity should end and restart, and if it is not running, just start it.
There must be a flag for this. can anyone help me what this flag is?
GcmIntentService.java
...
public class GcmIntentService extends IntentService {
public GcmIntentService() {
super("GcmIntentService");
}
public static final String TAG = "GcmIntentService";
@Override
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this);
String messageType = gcm.getMessageType(intent);
String message = extras.getString("message").toString();
String notificationTitle = extras.getString("title");
if (!extras.isEmpty()) {
if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) {
sendNotification(message, notificationTitle);
}
}
// Release the wake lock provided by the WakefulBroadcastReceiver.
GcmBroadcastReceiver.completeWakefulIntent(intent);
}
// Put the message into a notification and post it.
// This is just one simple example of what you might choose to do with
// a GCM message.
private void sendNotification(String msg, String notificationTitle) {
NotificationManager mNotificationManager = (NotificationManager)
this.getSystemService(Context.NOTIFICATION_SERVICE);
Intent notificationIntent = new Intent(this, ActivityMain.class);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
notificationIntent.putExtra("notification_message", msg);
notificationIntent.putExtra("notification", true);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.app_icon)
.setContentTitle(notificationTitle)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(msg))
.setContentText(msg);
mBuilder.setDefaults(-1);
mBuilder.setAutoCancel(true);
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify((int)System.currentTimeMillis(), mBuilder.build());
}
source to share
If yours is MainActivity
not running it will open / run (no problem here). If it's already running, the method onNewIntent()
(in your MainActivity
) will be called . Therefore, you can override it like this:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
init(); //this method will reload the data, or whatever you want to do
}
source to share
Try the following:
NotificationCompat.Builder mBuilder =new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(sender)
.setContentText(message);
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(context, MainActivity.class);
// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(LoginScreen.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification=mBuilder.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
// Play default notification sound
notification.defaults |= Notification.DEFAULT_SOUND;
// Vibrate if vibrate is enabled
notification.defaults |= Notification.DEFAULT_VIBRATE;
// mId allows you to update the notification later on.
mNotificationManager.notify(msg_ID,notification);
source to share
Do this in your main Activity to start the Activity:
Intent notificationIntent = new Intent(this, MainActivity.class);
startActivity(notificationIntent);
finish();
In your notification activity intent, open the main activity:
Intent mainIntent = new Intent(this, MainActivity.class);
startActivity(mainIntent);
finish();
source to share