【问题标题】:Location call backs not stopping after calling removeLocationUpdates调用 removeLocationUpdates 后位置回调未停止
【发布时间】:2023-03-21 19:37:01
【问题描述】:

我正在通过此类接收位置更新,一切正常,除了有时位置回调在调用 StopLocationUpdate() 后不会停止。请帮我纠正错误。我已经检查了可用于停止位置更新的答案,并且我已经实施了相同的方法。

FusedLocationProvider 类:

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.support.v4.app.ActivityCompat;

import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationCallback;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationResult;
import com.google.android.gms.location.LocationServices;

class FusedLocationProvider {

    /*Fused API Client Objects.*/
    private FusedLocationProviderClient mFusedLocationClient;
    private LocationCallback mLocationCallback;
    private LocationRequest mLocationRequest;


    /*Listener Interface.*/
    private FusedLocationListener iFusedLocationListener;


    /*Source activity.*/
    private Context context;
    private boolean isRequestingUpdates = false;


    FusedLocationProvider(Context context, LocationRequest locationRequest) {

        this.context = context;
        mLocationRequest = locationRequest;

        /*Get FusedLocationProviderClient.*/
        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this.context);

        /*Start process of building the LocationCallback, LocationRequest.*/
        createLocationRequestCallback();
    }

    void StartLocationUpdate(FusedLocationListener iListener) {

        /*Hook the listener for callbacks.*/
        iFusedLocationListener = iListener;

        /*Check if request already ongoing.*/
        if (!isRequestingUpdates) {

            initiateLocationUpdate();
        }
    }

    void StopLocationUpdate() {

        if (isRequestingUpdates) {

            mFusedLocationClient.removeLocationUpdates(mLocationCallback);
            iFusedLocationListener.OnLocationUpdateStopped();
            isRequestingUpdates = false;
        }
    }

    private void createLocationRequestCallback() {

        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {

                iFusedLocationListener.OnLocationUpdate(locationResult);
            }
        };
    }


    private void initiateLocationUpdate() {

        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            // TODO: Consider calling
            //    ActivityCompat#requestPermissions
            // here to request the missing permissions, and then overriding
            //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
            //                                          int[] grantResults)
            // to handle the case where the user grants the permission. See the documentation
            // for ActivityCompat#requestPermissions for more details.


            return;
        }

        iFusedLocationListener.OnLocationUpdateStarted();
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null /* Looper */);
        isRequestingUpdates = true;
    }
}

【问题讨论】:

  • 愚蠢的问题:当你打电话给StopLocationUpdate()时,你确定isRequestingUpdatestrue吗?
  • 是的,当调用 StartLocationUpdate 时,isRequestingUpdates 值设置为 true。

标签: java android fusedlocationproviderapi


【解决方案1】:

我遇到了类似的问题。问题原来是我有多个保存 locationCallback 的类实例,因此被调用以停止位置更新的实例与启动它们的实例不同。

那么对于您的代码,您是否可能有多个 FusedLocationProvider 实例?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2016-02-07
    • 2010-11-13
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多