android 地理围栏 java.lang.IllegalStateException:GoogleApiClient 尚未连接

android geofencing java.lang.IllegalStateException: GoogleApiClient is not connected yet

我正在我的应用程序中使用地理围栏。每当我尝试添加地理围栏时,都会出现以下错误。

IllegalStateException: GoogleApiClient is not connected yet

在 AppCompatActivity 的 onCreate 方法中我定义了客户端

/* Create a new google api client */
mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .addApi(LocationServices.API)
        .build();

并在我的 onStart 方法中连接到它以确保它不为空

/* Connect to the API client */
super.onStart();
if (mGoogleApiClient != null) {
mGoogleApiClient.connect();
}

但它仍然报错。

我的 AppCompatActivity 实现了 OnMapReadyCallback 和 ResultCallback 接口等

我有一个重写的方法

@Override
public void onMapReady(GoogleMap googleMap) {}

onMapReady 方法包含这行代码

LocationServices.GeofencingApi.addGeofences(
mGoogleApiClient,
        getGeofencingRequest(),
        getGeofencePendingIntent()
).setResultCallback(MapsActivity.this);

我已经定义了 getGeofencingRequest 和 getGeofencingPendingIntent 私有方法并覆盖了 ResultCallback 中的 onResult 方法。

我在这个错误上花费了很多时间,但似乎无法取得进展。应用程序正常执行,直到 AppCompatActivity 启动。 onCreate 正常发生,onStart 也正常发生。

这个错误我认为有两种可能:

  1. 在 onStart 之前调用 onMapReady 方法(不太可能)

  2. onStop 方法在客户端可用于 onMapReady 方法之前断开客户端连接

无论对错误的一些解决方案如何,我们将不胜感激。

Link 完整要点如下: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac

我找到了我自己问题的答案。

显然,google API 客户端连接与 Google 地图连接是分开的。 API 客户端专门用于定位服务。

因此,我需要在 API 连接建立后设置地理围栏。

所以我也将所有地理围栏代码都移到了 onConnected 中。

@Override
public void onConnected(Bundle savedInstanceState) { }

问题解决了。

看看更新后的要点: https://gist.github.com/serceberka/0935e185e663a3be13eb13f4b9e0d5ac