在几次(不成功(尝试使我的应用程序符合对该位置的后台访问后,我决定重新构建代码,以便从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
通过请求对象和回调来接收更新。
准确代码的有用链接:请求更新