在前台Android中获取最后一个已知位置



在几次(不成功(尝试使我的应用程序符合对该位置的后台访问后,我决定重新构建代码,以便从manifest中删除ACCESS_BACKGROUND_LOCATION权限。

我的application必须在特定时间获得设备的位置(特别是我需要坐标(,我感兴趣的是:如果不使用上面提到的权限,我如何在前台中获取设备的位置?

是否可以在不使用服务等的情况下通过一次通话完成?

我考虑过使用这个代码,你认为它足够吗?

LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
// Logic to handle location object
}
}
});

或者类似的东西:

LocationManager mLocationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location location = mLocationManager.getLastKnownLocation(provider);
if (location == null) {
continue;
}
if (bestLocation == null || location.getAccuracy() < bestLocation.getAccuracy()) {
bestLocation = location;
}
}

有更好的方法吗?

要获得最后知道的位置,您需要在Manifest文件中声明以下权限。

"android.permission.ACCESS_FINE_LOCATION";

然后您可以使用已使用的融合位置提供程序。

现在,若你们想要定期更新,你们可以使用下面的回调来注册这些更新。

requestLocationUpdates

通过请求对象和回调来接收更新。

准确代码的有用链接:请求更新

最新更新