onLocationChanged not called on some devices

后端 未结 7 1490
悲哀的现实
悲哀的现实 2020-12-30 01:38

This is a question which has been asked numerous times but I could not find a solution that always works.

I am developing an application using the Fused location pro

相关标签:
7条回答
  • 2020-12-30 02:02

    See if you're getting a passed location by testing for if (loc == null). Even though it's the same provider, maybe one device is coming back null and bombing out, resulting in a look like it's not firing.

    0 讨论(0)
  • 2020-12-30 02:10

    try to remove and reinstall "google play services". Install it from google market link bellow, google play services

    0 讨论(0)
  • 2020-12-30 02:12

    This maybe non-sense but I have faced this problem before, someone suggested that you should create your own LocationListener instead of letting your MainActivity implements LocationListener. Basically this:

    locationclient.requestLocationUpdates(lr, your_location_listener);
    

    Hope this helps.

    0 讨论(0)
  • 2020-12-30 02:14
    lr.setInterval(100); 
    

    with it your interval is 0,1 second so it very hard for gps chipset to detect location. Your interval should be > 1 second.(with me it is > 10)

    locationRequest it should be set:

    setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY) because PRIORITY_BALANCED_POWER_ACCURACY in outdoor it doesn't get location . Code will look like :

    lr=LocationRequest.create();
    
    lr.setInterval(5 * 1000);// 5s
    
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationclient.requestLocationUpdates(lr, this);
    

    Hope this help.

    0 讨论(0)
  • 2020-12-30 02:15

    I solved this by setting both parameters, minimum distance and minimum time between updates to 0. As per what I have tested on 2 devices, now onLocationChanged() is being called regularly after requesting for updates.

    0 讨论(0)
  • 2020-12-30 02:17

    I observed same behavior on Galaxy Nexus and recognized two things causing onLocationChanged() to not being called. There are

    1. Corresponding location source is not enabled in System Settings. For PRIORITY_HIGH_ACCURACY the GPS satellites must be enabled, for PRIORITY_BALANCED_POWER_ACCURACY Wi-Fi & mobile network location must be enabled.

    2. Even for the enabled location sources there can be no valid location information available. For instance, PRIORITY_HIGH_ACCURACY source is enabled, but there is no (or not good) GPS reception (e.g. device is inside a building). Or PRIORITY_BALANCED_POWER_ACCURACY source is enabled, but both Wi-Fi and mobile data are switched off. In those cases location cannot be detected and onLocationChanged() will not be called.

    To fix #1 I had to check whether required location sources are enabled even before connecting to Google Services API and if they are switched off, then I notified a user asked him/her to allow location access.

    To solve #2 I decided to use LocationRequest.setExpirationDuration(). I set timeout at about 10 seconds, and immediately after calling requestLocationUpdates() I post a callback delayed by same 10 seconds. If delayed callback is called before requestLocationUpdates(), this means location cannot be detected due to reason #2. I do three retries and then show user an error message.

    Android documentation is not great at this place, that's why I hope this helps.

    0 讨论(0)
提交回复
热议问题