Android LocationManager 总是 returns 相同的旧位置
Android LocationManager always returns the same old position
我的 Android 应用程序有问题。我想接收位置更新并编写了以下代码:
onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
requestPermission();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, this);
// Define the criteria how to select the location provider -> use
// default
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
onLocationChanged(location);
}
}
}
onLocationChanged:
@Override
public void onLocationChanged(Location location) {
if (mMap != null) {
setMoveToLocation(location, mMap.getCameraPosition().zoom);
}
}
和setMoveToLocation
private void setMoveToLocation(Location location, float zoom) {
// Add a marker at given location and move the camera
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
Log.i("Location", "Lat: " + lat + ", Long: " + lng + " Time: " + location.getTime());
LatLng pos = new LatLng(lat, lng);
mMap.addMarker(new MarkerOptions().position(pos).title("Your position"));
Log.i("Zoom", "Zoom: " + zoom);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pos, zoom));
}
查看输出:
Log output
总是一样的错误位置,我不在51,7! GPS 确实已开启,我收到相关通知,其他应用程序(如 Google 地图或此处)工作正常。
我使用的是 Android 6.0.
的华为荣耀 7
有什么想法吗?
提前致谢,
普莱博
您正在将纬度和经度转换为整数:
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
并且由于纬度和经度是双倍的,因此它们分别被转换为 51 和 7
我的 Android 应用程序有问题。我想接收位置更新并编写了以下代码:
onCreate:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
requestPermission();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 0, this);
// Define the criteria how to select the location provider -> use
// default
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
onLocationChanged(location);
}
}
}
onLocationChanged:
@Override
public void onLocationChanged(Location location) {
if (mMap != null) {
setMoveToLocation(location, mMap.getCameraPosition().zoom);
}
}
和setMoveToLocation
private void setMoveToLocation(Location location, float zoom) {
// Add a marker at given location and move the camera
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
Log.i("Location", "Lat: " + lat + ", Long: " + lng + " Time: " + location.getTime());
LatLng pos = new LatLng(lat, lng);
mMap.addMarker(new MarkerOptions().position(pos).title("Your position"));
Log.i("Zoom", "Zoom: " + zoom);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pos, zoom));
}
查看输出: Log output
总是一样的错误位置,我不在51,7! GPS 确实已开启,我收到相关通知,其他应用程序(如 Google 地图或此处)工作正常。 我使用的是 Android 6.0.
的华为荣耀 7有什么想法吗?
提前致谢, 普莱博
您正在将纬度和经度转换为整数:
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
并且由于纬度和经度是双倍的,因此它们分别被转换为 51 和 7