Android LocationListener Switching from GPS to Network

后端 未结 2 1167
心在旅途
心在旅途 2020-12-15 14:18

I have a Service implementing LocationListener listening for both GPS and Network.

The application is dependant on a constant location-feed, but it seems when GPS h

2条回答
  •  伪装坚强ぢ
    2020-12-15 15:00

    I agree with most of comments from AlexBottoni good answer, although in some points I can't suppot him.

    Overview

    First, just to check that you are doing it right...

    You setup the same LocationListener for both providers. To indentify from where you are reciving the location you need to test it like this:

    public void onLocationChanged(Location fix) {
        if(fix.getProvider().equals(LocationManager.GPS_PROVIDER)){
            //here Gps
        } else if(fix.getProvider().equals(LocationManager.NETWORK_PROVIDER)){
            //here Network
        }
    

    Also, you setup a different acquisition frequency. Gps is providing a new location every 30 seconds and Network every 2 minutes.

    As you didn't impose a minimum distance, you should receive a new Location from each one of the providers (as long as they can get a fix) with the frequency requested. If you don't receive a fix, is because they weren't able to acquire one.

    Also, it may takes a little longer then requested to get the fix (mainly with Gps), because it may take some time to shyncronize with satellites and fix a location.

    Fallback

    There is no builted-in fallback from one provider to the other. They are independet, as said by Alex. I'm using the following approach to implement fallback:

    • Register Gps listener and start a timer
    • On every GPS location, restart timer
    • If timer reachs end, register Network listener (Gps listener keeps registered)
    • If new Gps location arrives, unregister Network listener, restart timer

    Preferable Provider

    Although Gps may not be available everyhere, is far most precise then Network. In my town, I get 6 meters accuracy with GPS and 1 Km with Network :-(

    Two services

    Doesn't matter where you register the listener, activity or service, separate ot together, as long as you request them and the provider can get a fix, you will get the location (assuming no bugs in application :-))

    Final Notes

    Ensure you have the permissions need (ACCESS_FINE_LOCATION, INTERNET, etc).

    Ensure that phone setup have Network Location enabled (usually default is disable)

    Most Gps receivers support updating information about satellite location, which improves fix time. You can use GPS Satus from the market, to do it.

    Regards.

提交回复
热议问题