无法使用融合位置API停止位置更新

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法使用融合位置API停止位置更新相关的知识,希望对你有一定的参考价值。

嗨,我正在开发小型android应用程序,我正在尝试使用融合位置更新获取位置更新。我按照以下方式尝试了它:

private void processStartLocation() {
    mGoogleApiClient.connect();
}

@Override
public void onConnected(Bundle bundle) {

    updateBooleanSharedPreference(this, "isLocationUpdatesOn", true);
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, locationPendingIntent);

    mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    if (mLastLocation != null) {
        lat = String.valueOf(mLastLocation.getLatitude());
        lon = String.valueOf(mLastLocation.getLongitude());
        time = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS").format(new Date(mLastLocation.getTime()));
        updateUI();
    }
}

private void processStopLocation() {

    LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, locationPendingIntent);
}

所以一切都很好。我能够收到我的更新。但是当我尝试停止更新时,我遇到了以下问题:

java.lang.IllegalStateException: GoogleApiClient is not connected yet.
at com.google.android.gms.internal.zzlh.zzb(Unknown Source)
at com.google.android.gms.internal.zzli.zzb(Unknown Source)
at com.google.android.gms.location.internal.zzd.removeLocationUpdates(Unknown Source)

我做错了什么。需要一些帮助。谢谢。

答案

看到由于locationPendingIntent未连接而导致错误提出关于删除给定挂起意图(GoogleApiClient)的所有位置更新的错误 - 也许您应该在进行调用之前检查其连接状态:

private void processStopLocation() {
    if(mGoogleApiClient !=null){
       LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
    }
    else{
     //no need to stop updates - we are no longer connected to location service anyway
    }
}
另一答案

无法查看调用processStopLocation()的位置或时间,但该错误通常意味着您在processStopLocation()中使用的'mGoogleApiClient'对象已丢失对已连接的Google Api客户端对象的引用。也许processStartLocation()中的Google Api Client对象的setter和processStopLocation()中的getter可以正常工作。再次不知道更新开始过程的确切时间以及何时调用停止过程,很难确定问题的原因

以上是关于无法使用融合位置API停止位置更新的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Google 的融合位置 API 获取位置

停止位置侦听器服务 Android

使用融合的 google api 和挂起的意图,更新位置

如何从融合位置 api 中获取卫星数量?

在后台服务中使用融合位置获取GPS更新前(15分钟)?

融合位置 API 在关闭谷歌地图后给出高度不准确的位置