代码之家  ›  专栏  ›  技术社区  ›  noah

Android-可靠地获取当前位置

  •  8
  • noah  · 技术社区  · 14 年前

    locationManager.requestLocationUpdates(bestProvider, 0, 0, listener);
    

    并检查:

     locationManager.getLastKnownLocation(bestProvider);
    

    getLastKnownLocation 最有可能是GPS最后一次出现的地方,可能在任何地方(也就是说,它可能距离用户的当前位置有几英里)。所以我就等着 requestLocationUpdates 回调,如果它们在两分钟内没有出现,请删除侦听器并放弃,对吗?

    在不将旧位置误认为当前位置的情况下,获取当前位置的正确方法是什么?我不介意等几分钟。

    编辑:可能是我错了,没人打电话给我的听众,可能只是时间比我想象的要长一点。。。很难说。我还是希望有一个明确的答案。

    2 回复  |  直到 14 年前
        1
  •  4
  •   Community George Stocker    7 年前

    代码可能是这样的:

    public class MyLocation {
        Timer timer1;
        LocationManager lm;
    
        public boolean getLocation(Context context)
        {
            lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGps);
            timer1=new Timer();
            timer1.schedule(new GetLastLocation(), 20000);
            return true;
        }
    
        LocationListener locationListenerGps = new LocationListener() {
            public void onLocationChanged(Location location) {
                timer1.cancel();
                lm.removeUpdates(this);
                //use location as it is the latest value
            }
            public void onProviderDisabled(String provider) {}
            public void onProviderEnabled(String provider) {}
            public void onStatusChanged(String provider, int status, Bundle extras) {}
        };
    
        class GetLastLocation extends TimerTask {
            @Override
            public void run() {
                 lm.removeUpdates(locationListenerGps);
                 Location location=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                 //use location as we have not received the new value from listener
            }
        }
    }
    

    你可以在这里看到我的完整代码 What is the simplest and most robust way to get the user's current location on Android?

    编辑(asker):这是大多数答案,但我的最终解决方案使用了 Handler

        2
  •  4
  •   cristis    11 年前

    如果用户的位置已经稳定,那么 getLastKnownLocation 将返回当前位置。我会打电话的 GetLastKnown位置 Location.getElapsedRealTimeNanos() 具有 SystemClock.elapsedRealTimeNanos() )如果修复程序太旧,则注册一个侦听器。