0

我正在研究 Google I/O 2013 中推出的地理围栏 API。创建和监控地理围栏

上面链接中给出的示例中有一个方法如下:

 public void createGeofences() {
    ........
    mGeofenceList.add(mUIGeofence1.toGeofence());
    mGeofenceList.add(mUIGeofence2.toGeofence());
}

此方法在我的活动的 onActivityResult 内,并且在同一个活动中,我有按钮来保存地理围栏并调用 mLocationClient.connect() -> 它与示例的 addGeofences() 方法相同。

@Override
private void onConnected(Bundle dataBundle) {
    ...
    switch (mRequestType) {
        case ADD :
            // Get the PendingIntent for the request
            mTransitionPendingIntent =
                    getTransitionPendingIntent();
            // Send a request to add the current geofences
            mLocationClient.addGeofences(
                    mGeofenceList, pendingIntent, this);
        ...
    }
}

在这个方法中 mGeofenceList 是空的,这不应该是因为它之前已经在 onActivityResult 方法中更新过。

问题:变量 mGeofenceList 在 onActivityResult 中更新,但在 onConnected 方法中访问时它是空的。我哪里错了?请帮忙。

4

1 回答 1

0

您确定您了解何时/是否onActivityResult调用? onActivityResult仅作为先前调用 的结果而被调用startActivityForResult,您没有提及。

虽然在这种情况下,这种方法的使用更加聪明。引用您提供的教程:

如果遇到错误,请调用 GooglePlayServicesUtil.getErrorDialog() 以检索提示用户采取正确操作的本地化对话框,然后在 DialogFragment 中显示该对话框。该对话框可能允许用户更正问题,在这种情况下,Google Play 服务可能会将结果发送回您的活动。要处理此结果,请覆盖方法 onActivityResult()。

因此,如果您使用教程中的代码,onActivityResult则仅在以下情况下调用:

  1. Google Play 服务有问题
  2. 您通过返回的对话框提示用户GooglePlayServicesUtil.getErrorDialog()修复错误
  3. 用户成功更改设置/等。使用其他活动
  4. 活动返回了一些 resultCode

由于您很可能毫无问题地运行 Google Play 服务onActivityResult,因此永远不会调用 ,因此您的列表始终为空。

我建议将您移动createGeofences()onCreate(如果您只是在测试并且没有很多)或某个后台线程(如果您有很多或者您不想减慢活动开始)

于 2013-06-17T19:31:42.067 回答