I am using this code to show the local notification and When notification comes then on click of notification want to launch the ListActivity but on Google nexus device
This is reported issue for kitkat 4.4 not opening activity when click on notification here is an issue url
http://code.google.com/p/android/issues/detail?id=63236
http://code.google.com/p/android/issues/detail?id=61850
suggested workaround is to cancel existing PendingIntent
, or use PendingIntent.FLAG_CANCEL_CURRENT
OR
Try below
Adding a flag in Activity
in AndroidManifiest.xml
android:exported="true"
Try to replace this
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); // To open only one activity on launch.
PendingIntent pIntent = PendingIntent.getActivity(context, reqCode,
notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
to
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); // To open only one activity on launch.
PendingIntent pIntent = PendingIntent.getActivity(context, reqCode, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
it will work for all version even with Kitkat also.
Note : Activity will be started outside of the context of an existing activity, so you must use the Intent.FLAG_ACTIVITY_NEW_TASK launch flag in the Intent.
If android:exported="true"
doesn't work for you, just redirect the intent from your LAUNCHER activity.
In your LAUNCHER activity check for incoming notifications as follows:
if(getIntent().hasExtra("type") && getIntent().getStringExtra("type").compareTo("notification")==0){
Intent redirect = new Intent(getIntent());
redirect.setClass(this,YourNotificationActivity.class);
startActivity(redirect);
}
If you need to filter the intent then use:
Intent incoming = getIntent();
if(intent.hasExtra("type") && intent.getStringExtra("type").compareTo("notification")==0){
Intent outgoing = new Intent(this, YourNotificationActivity.class);
outgoing.putExtra("title", incoming.getStringExtra("title");
outgoing.putExtra("content", incoming.getStringExtra("content");
startActivity(outgoing);
}
I hope it will help u.
long uniqueId= System.currentTimeMillis();
/** This is the part to let your application recognise difference notification when the user click on the notification.
* You could use any unique string to represent your notification. But be sure each notification have difference action name.
**/
taskDetailIntent.setAction("notifi" + uniqueId);
PendingIntent contentIntent = PendingIntent.
getActivity(this, 0, taskDetailIntent, PendingIntent.FLAG_ONE_SHOT);
builder.setContentIntent(contentIntent);
/** Set the unique id to let Notification Manager knows this is a another notification instead of same notification.
* If you use the same uniqueId for each notification, the Notification Manager will assume that is same notification
* and would replace the previous notification. **/
notificationManager.notify((int) uniqueId, builder.build());
You can also add PendingIntent.FLAG_ONE_SHOT
to fix this.
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);
My above code is working well for all OS version except Kitkat 4.4 and 4.4 + But i have got solution i, put the receiver in another process and it works well for all most Android OS versions...
Like this way..
activity android:name=".NotifyReciever" android:process=":remote"
and we can learn more about processes here....
Should I use android: process =":remote" in my receiver?