【发布时间】:2017-09-29 02:12:32
【问题描述】:
我无法刷新用户的位置。
在我的应用程序中,我启动了标记用户当前位置的地图,但 locationManager.getLastKnownLocation() 正在返回不同的位置
因为它使用缓存位置。
如何将最后一个已知位置与当前位置进行比较,以便在回调 OnMapReady 中标记地图上的正确位置?
我在 StackOverflow 中找到的每个示例都使用 LocationListener.onLocationChanged() 方法,但我需要在活动启动时刷新位置(如果需要)。
代码:
private static final String TAG_MAP_LOAD_FAILED = "FAIL LOADING MAP STYLE";
private static final String TAG_MAP_PARSING_FAILED = "FAIL PARSING MAP STYLE";
private GoogleMap mMap;
private LatLng mMyCoordinates;
private LocationManager mLocationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
try{
boolean success = googleMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(getContext(), R.raw.style_mapjson));
if(!success){
Log.e(TAG_MAP_PARSING_FAILED, "Failed parsing JSON Style");
}
}catch (Resources.NotFoundException ex){
Log.e(TAG_MAP_LOAD_FAILED, "Can't find style. Error:", ex);
}
mMap.setIndoorEnabled(false);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(mMyCoordinates);
markerOptions.title("Marker in my location");
mMap.addMarker(markerOptions);
CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(mMyCoordinates, 15);
mMap.moveCamera(cameraUpdate);
mMap.getUiSettings().setRotateGesturesEnabled(false);
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
OBS:我清理了代码,因为它充满了不成功的尝试。只是展示它的结构。
我应该改用FusedLocation吗?
【问题讨论】:
-
是的。
LocationManager使用不同的实现,我认为您不能将它与GoogleMap一起使用来获取连接回调。你从哪里得到这个想法的?为此,您需要一个 API 客户端。为什么您首先在 SO 而不是在 official documentation 中寻找答案是另一个论坛的问题。试着读到最后,你就会解决这个问题。是的,请使用FusedLocation,除非您想使用已弃用的代码
标签: android android-maps-v2 android-location locationmanager android-maps