我关注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上测试过。
答案 0 :(得分:3)
我相信这种情况正在发生,因为以下一行......
criteria.setAccuracy(Criteria.ACCURACY_LOW);
应该是......
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
我没有注意到在此更改后两次调用onReceive(...)
方法。希望这会有所帮助。