当应用未运行时,Android地理围栏停止工作

时间:2017-05-31 20:56:31

标签: android location broadcastreceiver google-api-client

我正在开发使用Google Geofence API的Android应用。 应用程序处于前台时,我的代码似乎工作正常,但只要应用程序移至暂停状态,地理围栏广播接收器就会停止接收事件。 我非常确定当应用程序转移到后台时,地理围栏会被删除,但我不知道为什么会发生这种情况。

我发现,我创建了一个地理围栏列表

Geofence geofence = new Geofence.Builder()
            .setRequestId(id)
            .setCircularRegion(lat, lng, GEOFENCE_RADIUS)
            .setExpirationDuration(Geofence.NEVER_EXPIRE)
            .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_DWELL)
            .setLoiteringDelay(1000)
            .build();
        geofences.add(geofence);

然后我创建了一个请求

geofenceRequest = new GeofencingRequest.Builder()
        .setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_DWELL)
        .addGeofences(geofences)
        .build();

此时我添加地理围栏

LocationServices.GeofencingApi.addGeofences(googleApiClient, request, createGeofencePendingIntent()).setResultCallback(this);

最后我启动广播接收器

String GEOFENCE_ACTION = "gac.broadcast.geofence";
    if (geoFencePendingIntent != null)
    {
        GoogleApiClientManager.setGeofencePendingIntent(geoFencePendingIntent);
        return geoFencePendingIntent;
    }
    Intent intent = new Intent(GEOFENCE_ACTION);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), GEOFENCE_REQ_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    GoogleApiClientManager.setGeofencePendingIntent(pendingIntent);
    return pendingIntent;

正如我已经说过的那样,一切都在前景中运行时完美无缺,但只要应用程序移动到后台,地理围栏事件就会停止发送给接收方。

附加信息(与广播接收方问题无关): 我试着做以下事情:

  • 我启动了地图片段,地理围栏工作正常,因此应用会显示通知
  • 我移动到主屏幕,以便应用程序移至暂停状态,不再收到通知
  • 我回到应用程序检查位置更新和谷歌API客户端仍在工作,他们实际工作
  • 最后地理围栏不再起作用了

希望一切都清楚,你们中的某个人可以帮助我。 提前致谢

1 个答案:

答案 0 :(得分:0)

实际上问题在于定义接收器意图。

我改变了

Intent intent = new Intent(GEOFENCE_ACTION);

Intent intent = new Intent(context, GeofenceBroadcastReceiver.class);

现在接收器在后台和前台都会收到通知。 希望这也可以帮助其他人。