我在跟着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待定意图。我的接收器"singleUpdateReceiver“将被调用,因为我之前注册了它
它可以工作,但是我的SingleUpdateReceiver的onReceive方法被调用了两次(!)。这会导致问题,因为我在第一次取消注册时会很小心。在任何调用中都没有额外的可用的。
谁能解释一下为什么locationManager.requestSingleUpdate(..)会触发两次挂起的意图吗?这会导致一些问题,因为我在接收器中做的第一件事就是取消注册,如下所示
context.unregisterReceiver(singleUpdateReceiver);在第二次调用时,接收方未注册,并抛出异常。
在Android 2.3.3 HTC Sensation上测试。
发布于 2011-07-28 11:38:32
我相信这是因为下面这行……
criteria.setAccuracy(Criteria.ACCURACY_LOW);应该是..。
criteria.setAccuracy(Criteria.ACCURACY_COARSE);我没有注意到onReceive(...)方法在此更改后被调用了两次。希望这能有所帮助。
https://stackoverflow.com/questions/6700610
复制相似问题