我必须在退出时更新
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);
}
答案 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
逻辑。