gpt4 book ai didi

java - 使用 FusedLocationProviderClient 时的 onLocationChanged

转载 作者:行者123 更新时间:2023-11-29 23:00:17 25 4
gpt4 key购买 nike

documentation已经明确指出 LocationListener “用于在位置发生变化时从 FusedLocationProviderApi 接收通知”。另一方面,FusedLocationProviderApi 已被标记为已弃用,他们建议使用 FusedLocationProviderClient。那么,如何在使用 FusedLocationProviderClient 时检测位置何时发生变化?

我需要它,因为如果我只使用 requestLocationUpdate 回调,无论位置值是否更改,它都会更新该值。我只需要更改位置值。这样,如果我将位置值更新到数据库就不会浪费。简而言之,仅在位置发生变化时更新位置值。而不是根据时间跨度更新位置值。

代码:

private void createLocationCallback() {
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
//every 5 seconds
mLastLocation = locationResult.getLastLocation();
mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
updateUI();//need onLocationChanged

}
};
}

private void startLocationUpdates(){
Log.e(TAG, "startLocationUpdate");
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_FINE_LOCATION);
}
return;
}
mFusedLocationClient.requestLocationUpdates(mLocationRequest,mLocationCallback, Looper.myLooper());
}

最佳答案

在您的LocationRequest 中,您可以使用setSmallestDisplacement .
示例

locationRequest.setSmallestDisplacement(10) // 10 meters. location callback only fired when location change more than 10 metter

另一件事是位置准确度不能 100%,所以有时您不要移动手机,但位置仍然会发生变化。

关于java - 使用 FusedLocationProviderClient 时的 onLocationChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57032801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com