Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用FusedLocationProviderClient时OnLocation已更改_Java_Android_Google Maps - Fatal编程技术网

Java 使用FusedLocationProviderClient时OnLocation已更改

Java 使用FusedLocationProviderClient时OnLocation已更改,java,android,google-maps,Java,Android,Google Maps,在中已明确说明,LocationListener“用于在位置发生更改时从FusedLocationProviderApi接收通知”。另一方面,FusedLocationProviderApi已被标记为不推荐使用,他们建议使用FusedLocationProviderClient。然后,如何在使用FusedLocationProviderClient时检测位置是否已更改 我需要它,因为如果我只使用requestLocationUpdate回调,它将更新该值,而不管位置值是否更改。 我只需要更改位置

在中已明确说明,
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());
}

位置请求中,您可以使用。
范例


另一件事是位置准确率不能达到100%,因此有时您会放置手机,但位置仍然会改变。

setInterval locationRequest.setInterval()和locationRequest.setFastTestInterval()如何?。我应该删除它吗?这个工作。我设置了locationRequest.setInterval(10000)、locationRequest.SetFastTestInterva(5000)和locationRequest.setSmallestDisplacement(10),在我行走+-15英里后数据库发生了变化,
setInterval
SetFastTestInterval
setSmallestDisplacement
可以组合。因为,它们用于不同的目的。有很多方法可以组合,每种方法都会给你不同的结果。因此,您应该了解每个功能,然后将其结合起来以实现您的期望。
locationRequest.setSmallestDisplacement(10) // 10 meters. location callback only fired when location change more than 10 metter