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. > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---

