And to further clear up my intentions:

I have a model class called "Event". It represents user activity in my
system (such as rating items or writing messages). These events are
delivered to the user through NotificationManager. For every such
event, the NM calls Event.toNotification() and delivers the
notification.

Furthermore, I have an activity called EventDetailsActivity. This is
triggered whenever the user taps on the notification to read the event
info in full length. This implies primarily two things:

1. I must be able to pass an Event model object to
EventDetailsActivity whenever the user taps the corresponding
notification
2. I must be able to reuse EventDetailsActivity even it is already
displaying another event (e.g. update it via onNewIntent())

Thus, in Event.toNotification(), I do this:

    public final Notification toNotification(Context context) {
        Intent intent = new Intent(context,
EventDetailsActivity.class);
        intent.putExtra("event", this);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        configureIntent(intent); // template method for subclasses

        PendingIntent contentIntent = PendingIntent.getActivity
(context,
                requestCode++, intent, 0);

        Notification notification = new Notification
(getNotificationIcon(),
                getTickerText(), getDate().getTime());
        notification.setLatestEventInfo(context, getTitle(), getText
(),
                contentIntent);

        return notification;
    }

Hope that clears up my intentions.

On 21 Nov., 11:14, Matthias <[EMAIL PROTECTED]> wrote:
> Well, when /do/ PendingIntents match? All I can say is that calling
> PendingActivity.getActivity() created a new PendingIntent each time I
> called it (I checked the OID in the debugger), and in this new object,
> I always store a new Intent object.
>
> As Guillaume suggested, I solved the problem by calling getActivity()
> like this:
>
> private static int requestCode;
> ...
> pi = PendingIntent.getActivity(context, requestCode++, intent, 0)
>
> and now everything works as expected. As for the intent itself, I
> instantiated it using FLAG_ACTIVITY_NEW_TASK and
> FLAG_ACTIVITY_SINGLE_TOP.
>
> On 20 Nov., 22:55, "Dianne Hackborn" <[EMAIL PROTECTED]> wrote:
>
> > I am really not clear on exactly what you are doing or expecting, but one
> > thing to watch out for -- when you get a PendingIntent, if there is already
> > a PendingIntent matching the Intent you have been given (NOT including the
> > extras), then you get that PendingIntent, NOT a new one.  So if you want to
> > change the extras you will either need to cancel the existing one, or modify
> > something in the action, type, data, or category so that it doesn't match
> > the existing one.
>
> > This is covered (not very well) in the last paragraph of the PendingIntent
> > documentation:
>
> >http://code.google.com/android/reference/android/app/PendingIntent.html
>
> > On Thu, Nov 20, 2008 at 8:38 AM, Matthias <[EMAIL PROTECTED]> wrote:
>
> > > This gets weirder every minute.
>
> > > Just out of curiosity I just called setIntent(null) in onPause() to
> > > make sure the Intent the Activity was started with is always reset. As
> > > soon as I start the Activity again though, getIntent() will AGAIN
> > > return the Intent I supposedly set to null before...... this Intent it
> > > returns even exists across re-deployments of the whole application
> > > (not across emulator reboots tho)!
>
> > > Am I the only one having these problems? ^^ This whole thing looks
> > > completely broken to me. None of the functionalities I used exposed
> > > the behavior that was documented.
>
> > > On 20 Nov., 17:03, Matthias <[EMAIL PROTECTED]> wrote:
> > > > I think this may be a bug in Android. I also tried following the
> > > > instructions from the docs under section "Launch Modes and Launch
> > > > Flags" with no success. That section suggested to declare any Activity
> > > > launched from NotificationManager to set the taskAffinitity to "" and
> > > > finishOnTaskLaunch to true, so that the Activity does a clean start
> > > > everytime it is called.
>
> > > > Even though the Activity is completely restarted now (onStart() is
> > > > called), getIntent() always yields the same intent, the one it was
> > > > started with for the very first time...
>
> > > > On 20 Nov., 14:17, Matthias <[EMAIL PROTECTED]> wrote:
>
> > > > > Hi,
>
> > > > > I have the following problem: When posting a new Notification, I pass
> > > > > along a PendingIntent used to fire up an Activity that shows details
> > > > > about this Notification. These details are passed as a Serializable
> > > > > Extra.
>
> > > > > However, the Intent holding the Extra is only updated once, when the
> > > > > Activity was started for the first time. If a new Notification arrives
> > > > > however, although I instantiate a new Intent, neither getIntent() nor
> > > > > onNewIntent() of said Activity deliver this new intent, instead they
> > > > > always deliver the Intent that was active when the Activity was
> > > > > started for the first time.
>
> > > > > I tried combining many of the flags that can be passed to Intents and
> > > > > PendingIntents (in particular FLAG_ACTIVITY_SINGLE_TOP which is said
> > > > > to do exactly what I need, namely calling onNewIntent() with the new
> > > > > intent, but that's not the case), but no luck.
>
> > > > > So, how can I update my Activity with the Intent used to fire it,
> > > > > whenever the Activity is already running?
>
> > > > > Thanks,
> > > > > Matthias
>
> > --
> > Dianne Hackborn
> > Android framework engineer
> > [EMAIL PROTECTED]
>
> > Note: please don't send private questions to me, as I don't have time to
> > provide private support.  All such questions should be posted on public
> > forums, where I and others can see and answer them.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to