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 也正常发生。
这个错误我认为有两种可能:
在 onStart 之前调用 onMapReady 方法(不太可能)
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
我正在我的应用程序中使用地理围栏。每当我尝试添加地理围栏时,都会出现以下错误。
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 也正常发生。
这个错误我认为有两种可能:
在 onStart 之前调用 onMapReady 方法(不太可能)
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