【发布时间】:2018-11-15 05:17:11
【问题描述】:
我在谷歌的新位置 API 上玩了一下(获取纬度和经度值):
private void getLastLocation(){
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
try {
mFusedLocationClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
Toast.makeText(getApplicationContext(), String.valueOf(latitude) + "/" + String.valueOf(longitude), Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getApplicationContext(), "Cannot get location", Toast.LENGTH_LONG).show();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.d("LocationFetch", "Error trying to get last GPS location");
e.printStackTrace();
}
});
} catch (SecurityException e){
Log.d("LocationFetch", "Permission missing");
}
}
当我第一次测试这段代码时,location 总是返回 null。然而,在打开 Instagram(它在我的手机上进行了位置更新 - 地理图标短暂出现)后,location 正在返回我的相关经度和纬度值。
如何使用新 API 在我的应用上请求位置更新,以防止 location 为空或检索非常旧的位置? (getLastLocation()不够,可能LocationRequest?)
值得注意的是,我不希望间隔更新,我希望它在调用一次时在 Android 服务中发生。
【问题讨论】:
-
使用 GPSTracker 的文章
-
基本上你需要创建自己的位置请求。因为 getLastLocation 尝试从其他应用获取位置,如果存在,您将获得 null。