deimos1988
deimos1988

Reputation: 6086

Click on Notification doesn't start activity

I am creating a notification from a service; the notification is shown, but when I click on it, nothing happens: It was supposed to open an activity.

My code:

NotificationManager notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(icon, "test", when);
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |   Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent = PendingIntent.getActivity(this, 0, 
notificationIntent,PendingIntent.FLAG_CANCEL_CURRENT);

notification.setLatestEventInfo(this, "title", "message", intent);
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(0, notification);

However if I use pretty much the same code from inside an activity, I can click on the notification, and my activity is shown. What am I doing wrong?

EDIT: It turns out that there was nothing wrong with this code, there was a different issue: When my service finished, it created the notification with the code above. However, the service also broadcasted that it was finished, and the receiver created another notification, which used a different code to create the notification (with no PendingIntents, so no defined action when the notification is clicked), and that notification must have placed itself instead of the original, correct one.

Upvotes: 2

Views: 2755

Answers (4)

Ciro Mine
Ciro Mine

Reputation: 819

Im my case my project use Android Annotations. So my error was when I created the Intent, I always set this:

Intent notificationIntent = new Intent(this, MainActivity.class);

But is necessary to set the Android Annotation's generated class:

Intent notificationIntent = new Intent(this, MainActivity_.class);

That's solves my problem

Upvotes: 0

Kerem
Kerem

Reputation: 2897

On top of using Notification.Builder for above Android 3.0, or NotificationCompat.Builder in support library v4 as @Raghunandan suggests in the comment, I had the same problem with a possible common solution to your problem.

This is specific to 4.4 as seen here:Issue 63236:Notification with TaskStackBuilder.getPendingIntent() is not open the Activity and here Issue 61850: KitKat notification action Pending Intent fails after application re-install

One confirmed solution is to perform cancel() operation on an identical PendingIntent with the one you are about to create.

What worked for me was to modify the target Activity's manifest definition and add android:exported="true" within "activity" tags for the target Activity. That would be MainActivity in your case I assume.

Example:

<activity
        android:name="com.your.MainActivity"
        android:exported="true" >
.
.
</activity>

Upvotes: 3

CompEng
CompEng

Reputation: 7376

This works with api level 8.

   private int NOTIFICATION_ID = 1;
    private Notification mNotification;
    private NotificationManager mNotificationManager;
    private PendingIntent mContentIntent;
    private CharSequence mContentTitle;

you can create notification like this :

     mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

            //create the notification
            int icon =  R.drawable.ic_launcher;
            CharSequence tickerText = mContext.getString(R.string.noti_comes); //Initial text that appears in the status bar

            long when =  System.currentTimeMillis();
            mNotification = new Notification(icon, tickerText, when);

            //create the content which is shown in the notification pulldown
            mContentTitle = mContext.getString(R.string.noti_comes_t); //Full title of the notification in the pull down
            CharSequence contentText = clck_see_noti; //Text of the notification in the pull down
            //you can set your click event to go to activity
            mContentIntent  = PendingIntent.getActivity(mContext, 0, new Intent(mContext, MainActivity.class), 0); 

            //add the additional content and intent to the notification
            mNotification.setLatestEventInfo(mContext, mContentTitle, contentText, mContentIntent);

            //make this notification appear in the 'Ongoing events' section
            mNotification.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL ;

            //show the notification
            mNotificationManager.notify(NOTIFICATION_ID, mNotification);

and do not forget the your service is registering in the manifest

 <service
        android:name="com.xx.your_service" 
        android:enabled="true"  
         >
    </service>

Upvotes: 1

Jorgesys
Jorgesys

Reputation: 126445

If you define an Activity that is not registered into the AndroidManifest.xml the notification will not show any error message, and nothin happen.

Intent notificationIntent = new Intent(this, MainActivity.class);

be sure to have the Activity to start from the notification registered into the AndroidManifest.xml

This guy had a similar problem "I misspelled my activity name in the manifest.":

launch activity from service when notification is clicked

Upvotes: 0

Related Questions