Hi Dan,
From what you explain, I can see, why the problem might arise (still
being a bit suspicius
about how the firing can happend between the two consecutive calls,
but alright, it might occur).
However I might disagree with the whole design semantic, unless you
can convince me otherwise
(which I of couse will be happy to accept given good arguments!):
Consider the situation where two IntentReceivers A and B are
registered for updates (activity.registerReceiver()
called twice).
Now the class A no more wants notifications, hence it calls
unregisterReceiver(). No call to removeUpdates()
since class B still wants notifications. Now the other class B also
wants to unregister. However in this situation,
since it is the last registered IntentReceiver class, it must first
call removeUpdates() and then unregisterReceiver in
order to avoid the problem, you described. This in my view, is
problematic.
Also in my original code I registered an IntentReceiver by first
calling locationManager.requestUpdates, then calling
activity.registerReceiver.
Following your argument, this might also be subject to problems, if
the location manager fires between the two calls, right? Hence
the correct order for registering is first calling
activity.RegisterReceiver at least once (to be sure that there is an
IntentReceiver, once I
call requestUpdates), then call requestUpdates?
I might have got the whole concept about location manager and
IntentReceivers wrong. But at least I hope you agree, that the
documentation
is not very clear on the subject.
Best regards,
Jakob Bjerre Jensen
On 6 Apr., 01:23, "Dan U." <[EMAIL PROTECTED]> wrote:
> Sounds like you are thinking backwards in terms of when things
> happen.
>
> Lets say I unregistered the receiver, but have not made the
> removeUpdates call. The location manager does not know this, and still
> sends out an update. Being that there are no more registered receivers
> for that update, it can't do anything but complain.
>
> However, if have only made the removeUpdates call, no more updates are
> sent. The receiver just sits there doing nothing at this point.
>
> Actually, in your original code, I could see it working part of the
> time. If removeUpdates were to get called before the location manager
> fired another update, not having a receiver registered wouldn't
> matter.
>
> On Apr 5, 3:56 pm,JakobBjerreJensen<[EMAIL PROTECTED]>
> wrote:
>
>
>
> > Hello Dan,
>
> > Thanks for your answer, which seems to solve the problem. However to
> > me the logical order is
> > first to call unregisterReceiver(ir) (saying this specific ir instance
> > is no more interested in notifications),
> > then calling removeUpdates() (saying skip all notifications to me).
>
> > Is that the correct interpretation/semantics of the calls?
>
> > Could you please tell me, why the other order of calls work?
>
> > I don't feel confident unless there is an explanation to this (which I
> > hope there is).
>
> > Best regards,
> >JakobBjerreJensen
>
> > On 5 Apr., 22:02, "Dan U." <[EMAIL PROTECTED]> wrote:
>
> > > If I have some time, I'll look into it more, but for now, have you
> > > tried to reverse the order of these calls:
>
> > > activity.unregisterReceiver(ir);
> > > locationManager.removeUpdates(new Intent("test"));
>
> > > On Apr 5, 3:20 am,JakobBjerreJensen<[EMAIL PROTECTED]>
> > > wrote:
>
> > > > Hello,
>
> > > > I have an IntentReceiver IR, which I register as follows:
>
> > > > locationManager.requestUpdates(..., new Intent("test"));
> > > > IntentFilter filter = new IntentFilter();
> > > > filter.addAction("test");
> > > > IR ir = new IR(...);
> > > > activity.registerReceiver(ir, filter);
>
> > > > This works excellent. However doing my unregistration as follows:
>
> > > > activity.unregisterReceiver(ir); // ir = same concreate class instance
> > > > as above
> > > > locationManager.removeUpdates(new Intent("test"));
>
> > > > still seems to produce broadcasts, which results in an error with
> > > > message
> > > > "Error receiving broadcast null in IR".
>
> > > > What is wrong with my unregistration code, and what is the correct way?
>
> > > > Also, should'nt it be enough just to call
> > > > locationManager.removeUpdates(new Intent("test"))? Basically this
> > > > says: "Don't inform me of any kind of broadcast from that location
> > > > manager anymore".
>
> > > > Best regards,
> > > >JakobBjerreJensen- Skjul tekst i anførselstegn -
>
> > > - Vis tekst i anførselstegn -- Skjul tekst i anførselstegn -
>
> - Vis tekst i anførselstegn -
--~--~---------~--~----~------------~-------~--~----~
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]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---