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());
    }

      

+3


source to share


4 answers


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
}

      

+1


source


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);

      

0


source


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(); 

      

-1


source


First you need to call finish()

and then restartMainActivity

finish(); //Close current activity
startActivity(getIntent()); //Restart it

      

-1


source







All Articles