android-如何在不打开地图/导航应用程序的情况下更新位置

时间:2013-07-19 05:25:25

标签: android locationmanager android-location

我想得到确切的&准确的当前位置。为此,我使用了位置管理器requestLocationUpdates()方法,但是调用onLocationChanged()方法需要花费很多时间。所以我将计时器设置为20秒。我的意思是即使在20秒之后也没有调用onLocationChanged()方法然后我决定采用最后的已知位置。我在这里遇到了问题。 getLastKnownLocation()返回null。

但我想要这个位置。在这里,我找到了一个解决方案。这是因为测试设备没有最近的位置更新与gps提供商。因此,我们需要手动打开地图/导航应用,然后它将返回该位置。我们需要做什么来获取位置而不是打开地图应用程序。我认为我们应该像地图应用程序那样进行位置更新。我们如何在不打开它的情况下实现这一点。

//使用requestLocationUpdates获取当前位置

public void getLocation() {

    locationManager.requestLocationUpdates(strProvider, 0, 0,
            CurrentlocationListener);

}

LocationListener CurrentlocationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub
        if (location != null) {

            locationManager.removeUpdates(this);
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            String strCurrentLatitude = String.valueOf(lat);
            String strCurrentLongitude = String.valueOf(lng);

            System.out
                        .println("Current Latitude and Longitude(onLocation Changed): "
                                + strCurrentLatitude
                                + ","
                                + strCurrentLongitude);
        }
    }

    @Override
    public void onProviderDisabled(String provider) {}

    @Override
    public void onProviderEnabled(String provider) {}

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {}
};

//使用lastknownlocation获取当前位置。

   String location_context = Context.LOCATION_SERVICE;

    locationManager = (LocationManager) getSystemService(location_context);
    Criteria crit = new Criteria();
    crit.setAccuracy(Criteria.ACCURACY_FINE);
    strProvider = locationManager.getBestProvider(crit, true);
    Location location = locationManager
                        .getLastKnownLocation(strProvider);
                System.out.println("location(geoPoint1): " + location);

                String strCurrentLatitude = "0", strCurrentLongitude = "0";

                if (location != null) {
                    strCurrentLatitude = String.valueOf(location
                            .getLatitude());
                    strCurrentLongitude = String.valueOf(location
                            .getLongitude());
                }

1 个答案:

答案 0 :(得分:1)

无论你在OnLocationChanged()做什么都是正确的。现在用这个替换LocationManager的代码。它会工作。

LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {

            // Creating a criteria object to retrieve provider
            Criteria criteria = new Criteria();

            // Getting the name of the best provider
            String provider = locationManager.getBestProvider(criteria, true);

            // Getting Current Location
            Location location = locationManager.getLastKnownLocation(provider);

            if (location != null) {
                onLocationChanged(location);



            }

            locationManager.requestLocationUpdates(provider, 1000, 0, this);

        }

感谢。 :)