Maybe FLAG_CANCEL_CURRENT does cancel the current intent if it has the same uri, action but also the same request code (since it's part of the identity) ?
2008/12/5 Dianne Hackborn <[EMAIL PROTECTED]> > FLAG_CANCEL_CURRENT will almost certainly work. If you look at the code, > if you have the flag set it just removes any existing intent and creates a > whole new pending intent with the intent you provide. The returned > PendingIntent can't contain the old intent data. > > > On Thu, Dec 4, 2008 at 1:19 AM, Matthias <[EMAIL PROTECTED]>wrote: > >> >> I'm pretty sure I used FLAG_CANCEL_CURRENT to no avail... passing >> different request codes each time was the only way to create a new >> intent. I spent a whole day on this combining flags to no avail, until >> I tried the workaround by Guillaume. >> >> On 25 Nov., 19:24, "Dianne Hackborn" <[EMAIL PROTECTED]> wrote: >> > It may or may not be the right thing to do. If you are not going to use >> the >> > old intent, you should just use FLAG_CANCEL_CURRENT to first cancel the >> > existing one so it can be replaced with your new one. >> > >> > On Tue, Nov 25, 2008 at 12:29 AM, Guillaume Perrot < >> [EMAIL PROTECTED] >> > >> > >> > >> > > wrote: >> > > Yes using request codes is the right thing to do, this is just a >> > > documentation bug in the end. >> > >> > > 2008/11/25 alex <[EMAIL PROTECTED]> >> > >> > >> Ok, so I ran into this exact issue too. I need to send different data >> > >> via the extras of the intent, but the old intent with the old extras >> > >> keeps getting delivered unless I pass unique values into the >> > >> mysterious requestCode parameter. >> > >> > >> So this begs the question: is using the requestCode in this way >> > >> kosher? Is there a better way? >> > >> > >> BTW, I'm using PendingIntents for alarms and notifications. >> > >> > >> On Nov 21, 2:47 pm, Guillaume Perrot <[EMAIL PROTECTED]> >> wrote: >> > >> > Thanks for your answer, it eventually solves the mystery \o/ >> > >> > I quoted it in the Issue 863. >> > >>http://code.google.com/p/android/issues/detail?id=863 >> > >> > >> > On 21 nov, 23:38, "Dianne Hackborn" <[EMAIL PROTECTED]> wrote: >> > >> > >> > > Ah you are right, the request code is also part of its identity. >> > >> > >> > > For the nitty gritty details, this file defines a PendingIntent >> > >> maintained >> > >> > > by the system and the full key used to match them: >> > >> > >> > > >> http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;. >> > >> .. >> > >> > >> > > On Fri, Nov 21, 2008 at 3:07 AM, Matthias < >> [EMAIL PROTECTED]> >> > >> wrote: >> > >> > >> > > > 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. >> > >> > >> > > -- >> > >> > > 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. >> > >> > -- >> > 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. >> >> > > > -- > 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. > > > > > -- Guillaume Perrot Software Engineer at Ubikod BuddyMob developer --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] 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 -~----------~----~----~----~------~----~------~--~---

