2

我正在尝试在多个会话中使用 Android 感知 API 注册多个位置围栏。但是每次我注册一个新的位置围栏时,它似乎都会放弃我的旧位置围栏并且不再触发它们。

String uniqueId = UUID.getid().toString() // sample to indicate this is always 
unique
AwarenessFence geoFence = LocationFence.in(lat, long, radius);
            Awareness.FenceApi.updateFences(
                        googleApiClient,
                        new FenceUpdateRequest.Builder()
                                .addFence(uniqueId, geoFence, pendingIntent)
                                .build())
                        .setResultCallback(new ResultCallback () { .....});

我的待定意图:

Intent intent = new Intent(GeoBroadcastReceiver.BROADCAST_KEY);
        Bundle bundle;
        bundle = new Bundle();
        bundle.putSerializable("model", model);
        intent.putExtra("specialBundle", bundle);
        PendingIntent geoBroadCastPendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

文档说这是如何添加栅栏,但我想知道我是否需要跟踪我的旧栅栏,并且每当我使用 Awareness.FenceApi.updateFences时,我都需要每次都添加它们?

4

2 回答 2

1

我知道这是个老问题,但我还是会回答,有人可能会觉得它有用。最近我遇到了类似的问题,我设法解决了。

在您的代码中,您将每个待处理的意图设置为相同的 requestCode。因此,标志 FLAG_CANCEL_CURRENT 您将覆盖所有先前的待处理意图(您始终设置为 0)。因此,要使其正常工作,您必须为每个 Pening Intent 设置唯一的 requestCode

于 2018-02-26T11:50:02.093 回答
0

您可能需要检查您的围栏钥匙。

如注册围栏中所述,注册围栏需要以下内容:

  • 一个Google Play 服务 API 客户端实例。
  • 一个AwarenessFence实例(栅栏本身)。
  • APendingIntent处理状态变化。
  • 栅栏键(标识栅栏并映射到AwarenessFence/PendingIntent对的字符串)。

另请注意,如果您addFence()使用已注册的栅栏键进行调用,则该键的AwarenessFencePendingIntent值将被覆盖。

希望有帮助!

于 2017-05-01T10:57:50.547 回答