I was hoping you forgot about that piece of code...I think I saw that
somewhere (someone else posted it somewhere so I may not be the only one
using it) when I was trying to figure out why i was trying to send multiple,
different pending intents, but the data was not changing - essentially I
think that everytime I thought I was creating a new one, I was actually only
changing the one that I had just submitted.

On Thu, Apr 23, 2009 at 1:55 PM, Dianne Hackborn <hack...@android.com>wrote:

> That said...  I would be -very- suspicious about the code you posted where
> you are effectively creating random identities for your pending intents.  In
> most of the places where one uses a pending intent, you give it to something
> that holds on to it indefinitely, so you need to be able to recover the
> previous pending intent so you can give it back to have it unregistered.
> That is why the API works the way it does.  This API is really not intended
> to generate tons of pending intents whose lifetime is not being managed.
>
>
> On Thu, Apr 23, 2009 at 10:52 AM, Dianne Hackborn <hack...@android.com>wrote:
>
>> Different request codes is a perfectly fine way to do it.
>>
>>
>> On Thu, Apr 23, 2009 at 9:48 AM, Rob Franz <rob.fr...@gmail.com> wrote:
>>
>>> So with all the input from this thread, what's the proper way to send x
>>> number of pending intents that are unique?
>>> I guess I'm doing it not 100% correctly (even though it seems to work for
>>> me and the intents are spaced out enough not to interfere with each other).
>>>  I was doing it
>>> as setData((Uri.parse("custom://"+SystemClock.elapsedRealtime())).
>>>
>>> -rob
>>>
>>> On Thu, Apr 23, 2009 at 12:40 PM, Dianne Hackborn 
>>> <hack...@android.com>wrote:
>>>
>>>> No, I mean setting the explicit component to your broadcast receiver
>>>> component on the Intent class.  I strongly strongly recommend this for this
>>>> kind of situation where you want someone to deliver some specific thing to 
>>>> a
>>>> component in your app.  Please read the Intent java doc for more info.
>>>>
>>>>
>>>> On Thu, Apr 23, 2009 at 4:01 AM, Fuzzmonkey <she...@gmail.com> wrote:
>>>>
>>>>>
>>>>> Hello,
>>>>>
>>>>> By explicit component do you mean <data android scheme="custom"></
>>>>> data> in the intent filter or code in the broadcast receiver? Is that
>>>>> all i'd need?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> George
>>>>>
>>>>> On Apr 23, 1:29 am, Dianne Hackborn <hack...@android.com> wrote:
>>>>> > You didn't include all of your code, but you definitely what to set
>>>>> an
>>>>> > explicit component for your receiver, and then the rest of the intent
>>>>> data
>>>>> > doesn't matter for deciding where or whether it will be delivered.
>>>>> >
>>>>> > On Wed, Apr 22, 2009 at 5:19 PM, Fuzzmonkey <she...@gmail.com>
>>>>> wrote:
>>>>> >
>>>>> > > Done a bit more digging.
>>>>> >
>>>>> > >
>>>>> proxIntent.setData((Uri.parse("custom://"+SystemClock.elapsedRealtime
>>>>> > > ())));
>>>>> >
>>>>> > > If i add this line, the proximity alert is still triggered but the
>>>>> > > intent is never received. That is I assume it's still being fired
>>>>> but
>>>>> > > not received. I just get..
>>>>> >
>>>>> > > I/LocationManagerService(   57): Entered alert
>>>>> >
>>>>> > > Rather than..
>>>>> >
>>>>> > > I/LocationManagerService(   57): Entered alert
>>>>> > > D/DEBUG   (  319): Broadcast received
>>>>> > > D/MyActivity(  319): Proximity alert fired
>>>>> > > D/MyActivity(  319): 2 2
>>>>> >
>>>>> > > Those log commands are in my broadcast reciever btw. Do i need to
>>>>> > > change my intent filter with regards to the data bit? I've also
>>>>> logged
>>>>> > > SystemClock.elapsedRealtime to see if the pending intents were
>>>>> being
>>>>> > > added at the same time, they aren't.
>>>>> >
>>>>> > > Thanks,
>>>>> >
>>>>> > > George
>>>>> >
>>>>> > > On Apr 22, 11:53 pm, Fuzzmonkey <she...@gmail.com> wrote:
>>>>> > > > Hmm.
>>>>> >
>>>>> > > > I'm currently using unique request codes and i'm still getting
>>>>> this
>>>>> > > > problem. I'm trying to add multiple proximity alerts, with each
>>>>> alert
>>>>> > > > containing different information. For example, i have 4 gps co-
>>>>> > > > ordinates belong to the same group. I want the intent to contain
>>>>> the
>>>>> > > > extra information reflecting this.
>>>>> >
>>>>> > > > Intent proxIntent = new Intent
>>>>> > > > ("android.intent.action.PROXIMITY_ALERT");
>>>>> > > > proxIntent.putExtra("goal", goalid);
>>>>> > > > proxIntent.putExtra("mgoal", mgoalid);
>>>>> >
>>>>> > > > I then add this 'unique' intent to a pending intent. r represents
>>>>> a
>>>>> > > > unique request code, generated at random.
>>>>> >
>>>>> > > > PendingIntent pi = PendingIntent.getBroadcast(this, r,
>>>>> proxIntent,
>>>>> > > > PendingIntent.FLAG_CANCEL_CURRENT);
>>>>> >
>>>>> > > > And then add this pending intent to the location manager.
>>>>> >
>>>>> > > > lm.addProximityAlert(latitude, longitude, radius, -1, pi);
>>>>> >
>>>>> > > > The problem i'm finding that if a add 4 proximity alerts quite a
>>>>> > > > distance appart, say 500m and set the radius to 50 the
>>>>> information i'm
>>>>> > > > receiving when a proximity alert is fired is always that of the
>>>>> last
>>>>> > > > alert added. I'm assuming this is because the pending intents are
>>>>> not
>>>>> > > > being seen as unique, and is being over written every time i add
>>>>> a new
>>>>> > > > proximity alert. If i had the line..
>>>>> >
>>>>> > > >
>>>>> i.setData((Uri.parse("custom://"+SystemClock.elapsedRealtime())));
>>>>> >
>>>>> > > > The proximity alerts don't seem to fire at all! It's all very
>>>>> > > > confusing. Any one shed any light on this?
>>>>> >
>>>>> > > > Thanks,
>>>>> >
>>>>> > > > George
>>>>> >
>>>>> > > > On Apr 22, 9:06 pm, Rob Franz <rob.fr...@gmail.com> wrote:
>>>>> >
>>>>> > > > > Yeah I agree - it is ugly, but for my purposes it worked... the
>>>>> intents
>>>>> > > > > wouldn't be fired one right after the other for me.
>>>>> >
>>>>> > > > > On Wed, Apr 22, 2009 at 4:02 PM, Tom Gibara <
>>>>> m...@tomgibara.com>
>>>>> > > wrote:
>>>>> > > > > > Setting the data uniquely in this way is a bit ugly - and
>>>>> what if you
>>>>> > > post
>>>>> > > > > > two intents within the granularity of the clock?
>>>>> > > > > > I use unique request codes. I can't claim that this is the
>>>>> intended
>>>>> > > use for
>>>>> > > > > > them (the documentation is a bit sparse) but it seems to work
>>>>> well.
>>>>> > > > > > Tom.
>>>>> >
>>>>> > > > > > 2009/4/22 Rob Franz <rob.fr...@gmail.com>
>>>>> >
>>>>> > > > > > Hi Dianne,I thought that the goal was to create unique
>>>>> > > pendingIntents...
>>>>> > > > > >> i.e. don't cancel or change the currently pending one.
>>>>> >
>>>>> > > > > >> For me, changing the extras didn't work - doing the
>>>>> setData() with
>>>>> > > the
>>>>> > > > > >> random value made the intent 'unique' in the eyes of the
>>>>> > > notification
>>>>> > > > > >> manager...i wanted the ability to send multiple different
>>>>> pending
>>>>> > > intents,
>>>>> > > > > >> and that's worked for me thus far.
>>>>> >
>>>>> > > > > >> -rob
>>>>> >
>>>>> > > > > >> On Wed, Apr 22, 2009 at 3:44 PM, Dianne Hackborn <
>>>>> > > hack...@android.com>wrote:
>>>>> >
>>>>> > > > > >>> I hope you aren't writing constants into real code like
>>>>> that. :}
>>>>> >
>>>>> > > > > >>> For changing the extras -- you need to use cancel, and this
>>>>> will
>>>>> > > result
>>>>> > > > > >>> in a new PendingIntent that you need to send to the
>>>>> notification
>>>>> > > manager.
>>>>> > > > > >>> As of cupcake you can alternatively use the new
>>>>> > > FLAG_UPDATE_CURRENT.
>>>>> >
>>>>> > > > > >>> On Thu, Mar 26, 2009 at 7:05 PM, Rob Franz <
>>>>> rob.fr...@gmail.com>
>>>>> > > wrote:
>>>>> >
>>>>> > > > > >>>> Actually it looks like
>>>>> > > > > >>>> PendingIntent pendingIntent =
>>>>> PendingIntent.getBroadcast(context,
>>>>> > > 0,
>>>>> > > > > >>>> intent, 0x10000000);
>>>>> >
>>>>> > > > > >>>> ...works for me (0x10000000 represents
>>>>> FLAG_CANCEL_CURRENT).  I
>>>>> > > can
>>>>> > > > > >>>> verify that the appropriate extras data makes it to the
>>>>> intent.
>>>>> > >  Hope this
>>>>> > > > > >>>> helps.
>>>>> >
>>>>> > > > > >>>> -Rob
>>>>> >
>>>>> > > > > >>>> On Thu, Mar 26, 2009 at 9:29 PM, Rob Franz <
>>>>> rob.fr...@gmail.com>
>>>>> > > wrote:
>>>>> >
>>>>> > > > > >>>>> I'm running into the same thing - sending multiple PIs
>>>>> with the
>>>>> > > extras
>>>>> > > > > >>>>> data changing each time.  If I send two PIs, I get the
>>>>> first PI
>>>>> > > extra
>>>>> > > > > >>>>> data.  I'm glad someone else ran into this, because I was
>>>>> going
>>>>> > > crazy
>>>>> > > > > >>>>> trying to find out why my stuff wasn't working.
>>>>> >
>>>>> > > > > >>>>> Seeing a couple of different opinions here... what's the
>>>>> Google-
>>>>> > > > > >>>>> preferred way to do it?  I'm in the US on TMobile so I
>>>>> believe
>>>>> > > it's
>>>>> > > > > >>>>> RC33 that I've got.
>>>>> >
>>>>> > > > > >>>>> Thanks
>>>>> > > > > >>>>> Rob
>>>>> >
>>>>> > > > > >>>>> On Mar 26, 7:08 pm, "info+farm" <bilgiciftl...@gmail.com>
>>>>> wrote:
>>>>> > > > > >>>>> > Thank you for your detailed answer Blake B.,
>>>>> >
>>>>> > > > > >>>>> > First of all I understood that different Extras are not
>>>>> act as
>>>>> > > a
>>>>> > > > > >>>>> > difference on PendingIntent comparison.
>>>>> >
>>>>> > > > > >>>>> > In the first option assigning a stub data element seems
>>>>> > > reasonable
>>>>> > > > > >>>>> but
>>>>> > > > > >>>>> > I did not like the approach to put not only irrelevant
>>>>> but also
>>>>> > > not
>>>>> > > > > >>>>> > necessary data on each intent call to distinguish them.
>>>>> >
>>>>> > > > > >>>>> > With the second approach, assigning FLAG_CANCEL_CURRENT
>>>>> flag to
>>>>> > > the
>>>>> > > > > >>>>> > PendingIntent worked well on button calls but did not
>>>>> work on
>>>>> > > > > >>>>> > notification calls. I received "Sending contentIntent
>>>>> failed:
>>>>> > > > > >>>>> > android.app.PendingIntent$CanceledException" error in
>>>>> logcat on
>>>>> > > each
>>>>> > > > > >>>>> > different PendingIntent start. I have seen a bug report
>>>>> is made
>>>>> > > about
>>>>> > > > > >>>>> > this issue(#13) on android-astrid.
>>>>> > > > > >>>>> > In the issue, it is said that although the javadoc says
>>>>> > > requestCode
>>>>> > > > > >>>>> is
>>>>> > > > > >>>>> > not used, the real OS code consider the value specified
>>>>> there.
>>>>> > > Then,
>>>>> > > > > >>>>> I
>>>>> > > > > >>>>> > used the requestCodes to distinguish the PendingIntent
>>>>> starts.
>>>>> >
>>>>> > > > > >>>>> > Is it possible to get information from the API
>>>>> builders, what
>>>>> > > will be
>>>>> > > > > >>>>> > the purpose of the requestCode parameter on
>>>>> PendingIntent
>>>>> > > creation in
>>>>> > > > > >>>>> > the future? The reason is I want to be able to sure
>>>>> that my
>>>>> > > code
>>>>> > > > > >>>>> won't
>>>>> > > > > >>>>> > stuck at that time of API change.
>>>>> >
>>>>> > > > > >>>>> > Regards,
>>>>> > > > > >>>>> > info+farm
>>>>> >
>>>>> > > > > >>>>> > On Mar 25, 5:01 pm, "Blake B." <bbuckle...@yahoo.com>
>>>>> wrote:
>>>>> >
>>>>> > > > > >>>>> > > To correct my previous statement, PendingIntents are
>>>>> cached
>>>>> > > by the
>>>>> > > > > >>>>> > > system, not Intents.  The note about how to
>>>>> differentiate
>>>>> > > Intents
>>>>> > > > > >>>>> > > still holds though, so if you need to replace a
>>>>> current
>>>>> > > > > >>>>> PendingIntent
>>>>> > > > > >>>>> > > with a new PI that has a new Intent that only differs
>>>>> by its
>>>>> > > > > >>>>> Extras,
>>>>> > > > > >>>>> > > be sure to use the flag FLAG_CANCEL_CURRENT so that
>>>>> the
>>>>> > > cached PI
>>>>> > > > > >>>>> is
>>>>> > > > > >>>>> > > not used.
>>>>> >
>>>>> > > > > >>>>> > > From Intent.filterEquals(o):
>>>>> > > > > >>>>> > >     Returns true if action, data, type, class, and
>>>>> categories
>>>>> > > are
>>>>> > > > > >>>>> the
>>>>> > > > > >>>>> > > same.  <== note does not include Extras
>>>>> >
>>>>> > > > > >>>>> > > From PendingIntents javadoc:
>>>>> >
>>>>> > > > > >>>>> > >  * <p>A PendingIntent itself is simply a reference to
>>>>> a token
>>>>> > > > > >>>>> > > maintained by
>>>>> > > > > >>>>> > >  * the system describing the original data used to
>>>>> retrieve
>>>>> > > it.
>>>>> > > > > >>>>>  This
>>>>> > > > > >>>>> > > means
>>>>> > > > > >>>>> > >  * that, even if its owning application's process is
>>>>> killed,
>>>>> > > the
>>>>> > > > > >>>>> > >  * PendingIntent itself will remain usable from other
>>>>> > > processes
>>>>> > > > > >>>>> that
>>>>> > > > > >>>>> > >  * have been given it.  If the creating application
>>>>> later
>>>>> > > > > >>>>> re-retrieves
>>>>> > > > > >>>>> > > the
>>>>> > > > > >>>>> > >  * same kind of PendingIntent (same operation, same
>>>>> Intent
>>>>> > > action,
>>>>> > > > > >>>>> > > data,
>>>>> > > > > >>>>> > >  * categories, and components, and same flags), it
>>>>> will
>>>>> > > receive a
>>>>> > > > > >>>>> > > PendingIntent
>>>>> > > > > >>>>> > >  * representing the same token if that is still
>>>>> valid, and
>>>>> > > can thus
>>>>> > > > > >>>>> > > call
>>>>> > > > > >>>>> > >  * {...@link #cancel} to remove it.
>>>>> >
>>>>> > > > > >>>>> > > On Mar 25, 7:48 am, "Blake B." <bbuckle...@yahoo.com>
>>>>> wrote:
>>>>> >
>>>>> > > > > >>>>> > > > Intents are cached by the system, and two Intents
>>>>> are not
>>>>> > > > > >>>>> > > > differentiated by their Extras.  So your two
>>>>> intents look
>>>>> > > like
>>>>> > > > > >>>>> the
>>>>> > > > > >>>>> > > > same Intent and the second one is being tossed out.
>>>>>  You
>>>>> > > must
>>>>> > > > > >>>>> differ
>>>>> > > > > >>>>> > > > Intents by their Action/Data/Category.  I will
>>>>> sometimes
>>>>> > > use the
>>>>> > > > > >>>>> Data
>>>>> > > > > >>>>> > > > field to hold a simple ID that is not really a URI
>>>>> to make
>>>>> > > two
>>>>> > > > > >>>>> intents
>>>>> > > > > >>>>> > > > appear different.  Look at the code for
>>>>> Intent.equals() I
>>>>> > > > > >>>>> believe, and
>>>>> > > > > >>>>> > > > you will see that Extras are not considered.
>>>>> >
>>>>> > > > > >>>>> > > > On Mar 24, 12:47 pm, "info+farm" <
>>>>> bilgiciftl...@gmail.com>
>>>>> > > > > >>>>> wrote:
>>>>> >
>>>>> > > > > >>>>> > > > > Are not Google developers looking into this forum
>>>>> > > anymore?
>>>>> >
>>>>> > > > > >>>>> > > > > Then, I will be missing the detailed answers.
>>>>> >
>>>>> > > > > >>>>> > > > > Regards,
>>>>> > > > > >>>>> > > > > info+farm
>>>>> >
>>>>> > ...
>>>>> >
>>>>> > read more ยป
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Dianne Hackborn
>>>> Android framework engineer
>>>> hack...@android.com
>>>>
>>>> Note: please don't send private questions to me, as I don't have time to
>>>> provide private support, and so won't reply to such e-mails.  All such
>>>> questions should be posted on public forums, where I and others can see and
>>>> answer them.
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>> --
>> Dianne Hackborn
>> Android framework engineer
>> hack...@android.com
>>
>> Note: please don't send private questions to me, as I don't have time to
>> provide private support, and so won't reply to such e-mails.  All such
>> questions should be posted on public forums, where I and others can see and
>> answer them.
>>
>>
>
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  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
android-developers-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to