2017-05-31 70 views
1

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

Breafly,我创建地理围栏

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; 

正如我已经说过的,在前台运行时,一切工作都很完美,但只要应用移动到后台,geofence事件就会停止发送给接收方。

附加INFOS(广播接收器的问题不相关): 我试图做到以下几点:

  • 我开始在地图片段和地理围栏工作正常,因此应用程序显示一个通知
  • 我移动到主屏幕,所以应用程序移动到暂停状态,并且不再收到通知
  • 我回到应用程序检查位置更新和谷歌API客户端仍在工作,他们实际上工作
  • 最后地理围栏无法正常工作

希望一切都很清楚,并且您的某个人可以帮助我。 在此先感谢

回答

0

实际上问题是定义接收方的意图。

我改变

Intent intent = new Intent(GEOFENCE_ACTION); 

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

现在接收机在背景和前景通知。 希望这可以帮助别人。

+0

你确定它在后台工作吗?因为我遇到了同样的问题,所以在应用程序处于前台状态时工作良好,但当应用程序在后台运行时,我没有收到任何通知。而且我已经使用Context和Receiver类设置了这个意图。 –

相关问题