获取Geofence.GEOFENCE_TRANSITION_EXIT的当前位置

时间:2017-03-02 07:41:22

标签: android locationlistener android-geofence

  

我必须在退出时更新geoFence。为此,我需要当前的位置。

当我的应用关闭时我没有onLocationChanged的监听器。并为了 更新geoFence我需要我的位置。他们是否可以通过Geofence.GEOFENCE_TRANSITION_EXIT

获取当前位置
public void broadcastUpdateGeoFences() {
        MainActivity.isGeoFenceAdded = false;//It tells to update geoFence
        Intent intent = new Intent(Constants.RECEIVER_GEOFENCE);
        intent.putExtra("done", 1);
        sendBroadcast(intent);
    }

MainActivity中的广播接收器

   private BroadcastReceiver receiver = new BroadcastReceiver() {
      @Override
      public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                int resultCode = bundle.getInt("done");
                if (resultCode == 1) {

                    if(!MainActivity.isGeoFenceAdded){
                        updateGeoFencesOnCurrentExit();//I need current location here
                    }
                }
            }
        }
    };

每件事情都很好。但在应用关闭时无法在退出时找到传递currentLocation 的方法。

private void updateGeoFencesOnCurrentExit(Location currentLocation){
            locationHandler.updateGeoFences(currentLocation);
}

2 个答案:

答案 0 :(得分:0)

您可以在广播中实现LocationListener接口,并像这样使用覆盖方法onLocationChanged

    @Override
public void onLocationChanged(Location location) {
    location.getLongitude();
    location.getLatitude();
}

答案 1 :(得分:0)

我不建议在IntentService或BroadcastReceiver中使用LocationListener,因为一旦函数(onHandleIntent或onReceive)退出就可以销毁它们。一旦获得地理围栏事件,我会使用PendingIntent和LocationManager来请求单个更新。我有示例应用程序来演示如何使用github(https://github.com/pablobaxter/AndroidLocationExamples)上的PendingIntent请求位置更新。

编辑:

仅供参考,IntentService没有错。您只是在主线程上运行的后台线程vs onHandleIntent中运行onReceive逻辑。