android geofencing java.lang.IllegalStateException:GoogleApiClient尚未连接

时间:2017-05-29 16:52:29

标签: android illegalstateexception geofencing android-geofence location-services

我在我的应用中使用地理围栏。每当我尝试添加地理围栏时,我都会收到以下错误。

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方法之前断开客户端

  3. 无论如何,我们都会对错误的解决方案表示赞赏。

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

1 个答案:

答案 0 :(得分:1)

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

显然,Google API客户端连接与Google Map连接是分开的。 API客户端专门用于位置服务。

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

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

@Override
public void onConnected(Bundle savedInstanceState) { }

解决了这个问题。

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