LocationManager.requestSingleUpdate

时间:2011-07-14 22:18:07

标签: android geolocation

我关注Android Location Deep Dive tutorial。在代码的一部分中,接收器是这样注册的。

IntentFilter locIntentFilter = new 
IntentFilter(SINGLE_LOCATION_UPDATE_ACTION);
context.registerReceiver(singleUpdateReceiver, locIntentFilter);

在代码的另一部分,我们找到以下内容;

singleUpatePI = PendingIntent.getBroadcast(context, 0, updateIntent, PendingIntent.FLAG_UPDATE_CURRENT);
locationManager.requestSingleUpdate(criteria, singleUpatePI);

理念是,当给定准确度标准的位置可用时,LocationManager将触发SingleUpdatePI Pending意图。我的接收器名为“singleUpdateReceiver”将被调用,因为我之前已经注册了

它可以工作,但我的SingleUpdateReceiver的onReceive方法被调用了两次(!)。这会导致问题,因为我第一次注意取消注册。任何调用都没有额外的功能。

任何人都可以解释为什么locationManager.requestSingleUpdate(..)会触发挂起的意图两次?这会导致一些问题,因为我在接收器中做的第一件事就是像这样取消注册

context.unregisterReceiver(singleUpdateReceiver);

在第二个invocaiton上,接收器未注册并抛出异常。

在Android 2.3.3 HTC Sensation上测试过。

1 个答案:

答案 0 :(得分:3)

我相信这种情况正在发生,因为以下一行......

criteria.setAccuracy(Criteria.ACCURACY_LOW);

应该是......

criteria.setAccuracy(Criteria.ACCURACY_COARSE);

我没有注意到在此更改后两次调用onReceive(...)方法。希望这会有所帮助。