Hi again, Just to follow up on this issue, it seems that all the cases of location update failures occur when the Wi-Fi is disabled. This is consistent with what Geoff described and seems to happen across a number of different phone models.
Now I ask my users in these cases to enable Wi-Fi -- I guess that is all I can do. As for the small number of cases where LocationManager.getProvider(LocationManager.NETWORK_PROVIDER) returns null, this seems to be on Samsung Vibrant phones. This occurs even when mobile networks are available and connected, so it is definitely not caused by the phone being in Airplane mode. I haven't found any fix for this. Best, Michael. On Dec 1, 9:34 am, michael <michael.d.peder...@googlemail.com> wrote: > Hi Geoff, > > Thanks for your valuable comments - I am relieved that it is not just > me going crazy (: > > I will be logging WIFI status and asking my users to enable WIFI if > they have problems. I will also log the phone model. > > Will let you know when I get some more data. > > Cheers,Michael. > > On Dec 1, 12:52 am, Funksta <geoff.sim...@gmail.com> wrote: > > > > > Ok, I turned on my wifi connection, and now it got the location. I > > then turned off my wifi connection and it still works. So I suspect > > that by enabling wifi, it somehow allowed the network location to get > > cached. Why doesn't it get set when I'm on 3G (or other cell based) > > network connections? > > > -Geoff > > > On Nov 30, 4:30 pm, Funksta <geoff.sim...@gmail.com> wrote: > > > > I have also noticed this same problem. When I register just the > > > NETWORK_PROVIDER for updates, I never see them come in. When I try to > > > use getLastKnownLocation(NETWORK), I get a null location. It seems > > > like thenetworkprovider just isn't working on my phone. I have > > > checked my settings and stopped/started thenetworklocation. > > > > I have a MyTouch 3G that recently was upgraded to 2.2.1 > > > > Is this a bug just on my phone? Is it a 2.2.1 problem? Somebody please > > > help illuminate the situation. > > > > I can register for updates with GPS fine, it's justnetworkthat has > > > the problem. > > > > -Geoff > > > > On Nov 30, 2:53 pm, ip332 <iprile...@gmail.com> wrote: > > > > > IMHO getProvider(LocationManager.NETWORK_PROVIDER) should return null > > > > only in two cases: > > > > 1. AIRPLANE mode. > > > > 2. In case of GSM phone when SIM card is missing and WiFI is disabled > > > > However I tested both cases on Milestone phone (Android 2.1-update1) > > > > and always got some not-null result :( > > > > The only possibility left is that user uses "hacked" phone, i.e. some > > > > app which disablesNetworkprovider or LocationService removed at > > > > all. > > > > Mistery :) > > > > > On Nov 30, 2:01 pm,michael<michael.d.peder...@googlemail.com> wrote: > > > > > > Hi again Igor, > > > > > > Thanks for your excellent suggestions, I will work on it over the next > > > > > couple of days. > > > > > > As another curiosity, I am experiencing a very small number of cases > > > > > where LocationManager.getProvider(LocationManager.NETWORK_PROVIDER) > > > > > returns null. Apparently some phones do not have this capability. > > > > > > Best, > > > > >Michael. > > > > > > On Nov 30, 7:57 pm, ip332 <iprile...@gmail.com> wrote: > > > > > > > One more thing: check how and when do you remove listener. > > > > > > > On Nov 30, 11:52 am, ip332 <iprile...@gmail.com> wrote: > > > > > > > >Michael > > > > > > > > Here are some suggestions: > > > > > > > 1. Additional logging: mCoarseLocationListener details, WiFi > > > > > > > status, > > > > > > > cell signal status (may be in those 5% cases users don't have any > > > > > > > signal?) > > > > > > > 2. Get details from users about phone models, running > > > > > > > applications and > > > > > > > Android versions. Recently I found interesting "feature" on > > > > > > > Motorola > > > > > > > phone: sensors do not report events unless the values have been > > > > > > > changed - this is a violation of the Android API. May be somewhat > > > > > > > similar happens with respect to thenetworklocation on some phones. > > > > > > > 3. Add "listener restart" logic after a certain timeout, i.e. if > > > > > > > you > > > > > > > didn't getonLocationChanged() after a certain time stop the > > > > > > > listener, > > > > > > > create and start it again. > > > > > > > 4. Get Android source code and study the LocationManager > > > > > > > hierarchy. > > > > > > > Probably the most complicated approach but I would start from > > > > > > > here. > > > > > > > > Best regards > > > > > > > Igor > > > > > > > > On Nov 30, 3:07 am,michael<michael.d.peder...@googlemail.com> > > > > > > > wrote: > > > > > > > > > Hi Igor, > > > > > > > > > Thanks for your reply, it is much appreciated. Thanks also for > > > > > > > > pointing out the issues with the code I provided. However, this > > > > > > > > was > > > > > > > > merely a stripped-down outline of what I am doing. The use of > > > > > > > > mCoarseLocationListener is a type from the strip-down process, > > > > > > > > and I > > > > > > > > agree that the LocationProvider variable is not necessary. > > > > > > > > > However, the problem remains that while the code works fine in > > > > > > > > 95% of > > > > > > > > cases, there are still 5% of cases where I never get a call to > > > > > > > >onLocationChanged. Any suggestions as to why this is the case > > > > > > > >would > > > > > > > > still be much appreciated. > > > > > > > > > Best, > > > > > > > >Michael. > > > > > > > > > On Nov 30, 12:29 am, ip332 <iprile...@gmail.com> wrote: > > > > > > > > > >Michael, > > > > > > > > > > According to Android documentation the following call > > > > > > > > > locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, > > > > > > > > > 0, 0, this); > > > > > > > > > requests updates from WiFi or cellularnetworkwhich means you > > > > > > > > > should > > > > > > > > > get some update (from cell tower) even if WiFi location is not > > > > > > > > > available. However, I've seen cases when Google map > > > > > > > > > application failed > > > > > > > > > to set map to "MyLocation" for several minutes while driving > > > > > > > > > on a > > > > > > > > > freeway. > > > > > > > > > > Back to your code. I think you need to replace > > > > > > > > > getLastKnownLocation(mCoarseLocationProvider) with > > > > > > > > > getLastKnownLocation(LocationManager.NETWORK_PROVIDER) - it > > > > > > > > > is not > > > > > > > > > clear where do you get mCoarseLocationProvider. > > > > > > > > > Also you don't need to use LocationProvider variable in your > > > > > > > > > code > > > > > > > > > fragment: > > > > > > > > > public MyLocationListener() { > > > > > > > > > mLocMan = > > > > > > > > > (LocationManager)getSystemService(Context.LOCATION_SERVICE); > > > > > > > > > > if > > > > > > > > > (mLocMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER) > > > > > > > > > != > > > > > > > > > null) { > > > > > > > > > mCurrentLocation = > > > > > > > > > mLocMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); > > > > > > > > > } > > > > > > > > > > > > > > > > > > > mLocMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, > > > > > > > > > 0, 0, > > > > > > > > > this); > > > > > > > > > } > > > > > > > > > > Check the following link which has a lot of useful > > > > > > > > > suggestions:http://developer.android.com/guide/topics/location/obtaining-user-loc... > > > > > > > > > > Bets regards > > > > > > > > > Igor > > > > > > > > > > On Nov 29, 2:44 pm,michael<michael.d.peder...@googlemail.com> > > > > > > > > > wrote: > > > > > > > > > > > Let me also add that the location listener does sometimes > > > > > > > > > > get calls to > > > > > > > > > > onProviderEnabled -- this happens after asking the user to > > > > > > > > > > enable > > > > > > > > > > wirelessnetworklocations if initially disabled. So I know > > > > > > > > > > for sure > > > > > > > > > > that the listener is registered correctly. It just never > > > > > > > > > > gets an > > > > > > > > > >onLocationChangedcall. > > > > > > > > > > > /Michael. > > > > > > > > > > > On Nov 29, > > > > > > > > > > 10:10 pm,michael<michael.d.peder...@googlemail.com> > > > > > > > > > > wrote: > > > > > > > > > > > > Hi folks, > > > > > > > > > > > > I have a location listener running in a foreground > > > > > > > > > > > service. The > > > > > > > > > > > listener registers for wirelessnetworkupdates in its > > > > > > > > > > > constructor. In > > > > > > > > > > > the majority of cases, location updates are received as > > > > > > > > > > > expected. > > > > > > > > > > > > However, log entries from the live app show that for > > > > > > > > > > > about 5% of my > > > > > > > > > > > users, location updates are never received even though > > > > > > > > > > > wireless > > > > > > > > > > >networklocation is enabled on the phone (I check this > > > > > > > > > > >through the > > > > > > > > > > > LocationManager.isProviderEnabled method). That > > > > > > > > > > > is,onLocationChanged > > > > > > > > > > > is never called, at least not within say 20 minutes of > > > > > > > > > > > registering the > > > > > > > > > > > listener. > > > > > > > > > > > > Does anybody have any idea why this might be? Are there > > > > > > > > > > > cases, or > > > > > > > > > > > certain geographic areas, where you would not expect > > > > > > > > > > > wireless > > > > > > > > > > > locations to be available? > > > > > > > > > > > > A stripped-down outline of the location listener code is > > > > > > > > > > > shown below: > > > > > > > > > > > > class MyLocationListener extends LocationListener { > > > > > > > > > > > private Location mLocation = null; > > > > > > > > > > > > public MyLocationListener() { > > > > > > > > > > > mLocMan = (LocationManager) > > > > > > > > > > > getSystemService(Context.LOCATION_SERVICE); > > > > > > > > > > > > if > > > > > > > > > > > (mLocMan.getLastKnownLocation(mCoarseLocationProvider) != > > > > > > > > > > > null) { > > > > > > > > > > > mCurrentLocation = > > > > > > > > > > > mLocMan.getLastKnownLocation(mCoarseLocationProvider); > > > > > > > > > > > } > > > > > > > > > > > > LocationProvider lp = > > > > > > > > > > > mLocMan.getProvider(LocationManager.NETWORK_PROVIDER); > > > > > > > > > > > mLocMan.requestLocationUpdates(lp.getName(), 0, > > > > > > > > > > > 0, this); > > > > > > > > > > > } > > > > > > > > > > > > public voidonLocationChanged(Location loc) { > > > > > > > > > > > mLocation = loc; > > > > > > > > > > > } > > > > > > > > > > > > } > > > > > > > > > > > > I verify through flurry logs that the "network" location > > > > > > > > > > > provider is > > > > > > > > > > > indeed obtained and enabled, and that mLocation == null > > > > > > > > > > > after about 20 > > > > > > > > > > > minutes. > > > > > > > > > > > > Any suggestions would be enormously appreciated. I am > > > > > > > > > > > running out of > > > > > > > > > > > ideas for how to fix this, and I cannot replicate the > > > > > > > > > > > issue on my own > > > > > > > > > > > test devices. > > > > > > > > > > > > Cheers, > > > > > > > > > > >Michael.- Hide quoted text - > > > > > > > > > > - Show quoted text - -- 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