2011-07-14 35 views
2

我正在關注Android Location Deep Dive tutorial。在代碼的一部分中,接收者是這樣註冊的。LocationManager.requestSingleUpdate

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); 

在第二invocaiton,接收器沒有被註冊,並拋出一個異常。

在Android 2.3.3上測試HTC Sensation。

回答

3

我相信這是因爲下面一行的發生......

criteria.setAccuracy(Criteria.ACCURACY_LOW); 

它應該是...

criteria.setAccuracy(Criteria.ACCURACY_COARSE); 

我沒有注意到onReceive(...)方法在此之後獲取調用兩次更改。希望這可以幫助。