Notification Click not launch the given Activity on Nexus Phones

孤者浪人 提交于 2019-11-28 06:24:25

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"

This issue is known for Android Kitkat 4.4 and Lollipop. Please add :

android:exported="true"

in android manifest inside activity tag which is supposed to be opened after tapping notification from status bar

You can also add PendingIntent.FLAG_ONE_SHOT to fix this.

PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
                        PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT);

Add android:exported = "true" in the manifest

<activity
            android:name=".ListActivity"
            android:label="ListActivity"
            android:exported="true">
</activity>

ListActivity is the activity which will be opened on the notification click.

Amrit

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?

The solution proposed by mass has worked for me and it's very simple, no need to change your code:

In your AndroidManifest.xml add the following attribute to your <activity> tag:

android:exported="true" 

It has worked in a Samsung Galaxy Young 2 with Android 4.4.2.

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());
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!