我在获取当前位置时遇到问题,因为我的 MainActivity 是监听器:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MINIMUM_TIME_BETWEEN_UPDATE,
MINIMUM_DISTANCECHANGE_FOR_UPDATE,
new MyLocationListener()
);
我有第二个活动,当我点击按钮时,我会计算距离我的位置的距离和我将用distanceTo
传递的gps坐标,如果距离在0到200之间,则返回true。
所以我在 SecondActivity
private boolean checkCoordinate(String gps) {
LocationManager lm = (LocationManager) getSystemService(App.getContext().LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return false;
}
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
double currentLongitude = location.getLongitude();
double currentLatitude = location.getLatitude();
Location loc1 = new Location("");
loc1.setLatitude(currentLatitude);
loc1.setLongitude(currentLongitude);
String[] sep = gps.split(",");
double latitude = Double.parseDouble(sep[0]);
double longitude = Double.parseDouble(sep[1]);
Location loc2 = new Location("");
loc2.setLatitude(latitude);
loc2.setLongitude(longitude);
float distanceInMeters = loc1.distanceTo(loc2);
if(distanceInMeters < 200){
return true;
}else{
return false;
}
}
但问题是someTimes,也许当我不改变我的位置功能时:
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
返回null,我不明白如何知道我当前的位置,因为我已经设置了requestLocationUpdates。 所以我怎么知道我现在的位置?
答案 0 :(得分:1)
getLastKnownLocation
将返回null
。如果您想确保有一个位置,您可以使用requestSingleUpdate
- 方法,在有可用位置之前它不会返回。
如果使用特定的提供者名称不使用API也可能是个好主意(如果使用特定的提供者并不重要(通常,获取位置的方式并不重要)。 API包含采用Criteria
- 对象而不是提供者名称的方法,您可以非常准确地定义所需的准确度等级。