为什么getLastKnownLocation返回旧位置?

时间:2015-03-10 14:07:58

标签: android android-maps-v2

我尝试在我的位置创建标记,但Google地图显示旧位置。

MapsActivity.java

private void setUpMap() {

    mMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker").snippet("Snippet"));
    mMap.setMyLocationEnabled(true);
    LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    String provider = locationManager.getBestProvider(criteria, true);

    Location myLocation = locationManager.getLastKnownLocation(provider);
      mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    double latitude = myLocation.getLatitude();
    double longitude = myLocation.getLongitude();
    LatLng latLng = new LatLng(latitude, longitude);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
    mMap.animateCamera(CameraUpdateFactory.zoomTo(14));
    mMap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude)).title("I am here!").snippet("Bla bla bla"));

}

清单许可

  <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
 <uses-permission android:name="myapp.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

1 个答案:

答案 0 :(得分:0)

来自getLastKnownLocation()

的Android参考手册
  

返回一个位置,指示从给定提供程序获取的上次已知位置修复的数据。

     

这可以在不启动提供程序的情况下完成。请注意这一点   位置可能已过时,例如,如果设备已转动   关闭并搬到另一个地方。

在您的情况下,您可以尝试在Criteria中定义准确性。

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);

一般情况下,我会使用推荐的Fused Location Provider API。您可以找到指南here