Hello Droid Guys,
In this tutorial , I am going to explain how to open a new activity class
whenever a push notification comes on your device.
Step 1. For this first of all follow Android Goggle Cloud Messaging .
In this blog I already explain how to register your application for GCM,
Obtaining the sender id and getting the registration id from GCM server.
step 2. Once you complete the step-1 then inside your GCMIntentService.java class add
following code.
In this tutorial , I am going to explain how to open a new activity class
whenever a push notification comes on your device.
Step 1. For this first of all follow Android Goggle Cloud Messaging .
In this blog I already explain how to register your application for GCM,
Obtaining the sender id and getting the registration id from GCM server.
step 2. Once you complete the step-1 then inside your GCMIntentService.java class add
following code.
@Override
protected void onMessage(Context context, Intent arg1) {
Log.i(TAG, "new message= ");
String message = "success on server";
// displayMessage(context, message);
// notifies user
generateNotification(context, message);
}
Now,
/**
* Issues a notification to inform the user that server has sent a message.
*/
private static void generateNotification(Context context, String message) {
int icon = R.drawable.ic_launcher;
long when = System.currentTimeMillis();
NotificationManager notificationManager = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, message, when);
String title = context.getString(R.string.app_name);
Intent notificationIntent = new Intent(context, Messenger.class);
notificationIntent.putExtra("MESSAGE",message);
notificationIntent.putExtra("ISNOTIFICATION",true);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
}
This , will helps you to open a new class whenever apush notification comes.
On tapping the Notification from notification bar.
Enjoy Coding... :)
Cheers :)
Also see this link for help
1. Google Cloud Messaging
hi buddy, but i think we need to click on the notification in notification bar..Is there way to do it without clicking the notifcation, but just automatically, immediately on receiving push notification ?
ReplyDeleteHello AlvajIndia,
ReplyDeleteInside onMessage() method you have to call
Intent notificationIntent = new Intent(context, Messenger.class);
notificationIntent.putExtra("MESSAGE",message);
notificationIntent.putExtra("ISNOTIFICATION",true);
// set intent so it does not start a new activity
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent =
PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, title, message, intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);
then might be it will works.
Hi Mukesh,
ReplyDeleteMy notification will open the activity as given PendingIntent but for multiple notification its keep opening the same activity again and again, can you help me to solve this problem ?
Hello Gopal,
ReplyDeleteYou mean the notification msg remain same evrey time??
Or
You have more than one notification in your app??
Hi Mukesh i have same problem...as gopal..
ReplyDeleteSuppose i receive 1st notification and click notification and it open application activity...
Now i receive 2nd notification and i open it again but here not its showing its previous state of 1st notification it is not updating that activity... i m calling same activity with different intent extras... it should change according to what i receive in intent but it is not changing..
Pleae help
Hello Rina,
ReplyDeleteYes, that is an issue with push notification Here is the solution which I am doing
and Its working for me: Add following code in your calling activity class
/*
* fix for the bug: when new push will be receive
* the intent will showing old push data.
* Note: when we are using clear top and single top and want to get new data from intent
* then we use onNewIntent(Intent intent)
*/
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Bundle extras = intent.getExtras();
if(null != extras) {
//do your operation here
//then clear the extra
extras.clear();
extras=null;
}
}