2012-06-03 59 views
3

我有一個後臺服務,定期工作timer.scheduleAtFixedRate。它會喚醒每一段時間(比如說60秒)並檢查位置。Android:如何定期檢查當前位置,而不會耗盡電池

該位置由locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 5, listener);檢查,實際位置從收聽者的onLocationChanged收集。

現在,當手機在戶外並且GPS接收良好時,此功能正常工作。 但是,如果手機在裏面,GPS幾乎總是處於活動狀態 - 尋找信號,並且電池快速耗盡。

我創建使用處理器和一個Runnable另一個線程,以conrol GPS的活動時間準確: 我用locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);locManager.removeUpdates(listener);這樣我就可以打開和關閉GPS,因爲我想要的。 在這種情況下,我可以打開GPS達到確切的時間,但發現即使在10秒後,它也不會鎖定在接收良好的區域。所以在這裏我再次耗盡電池...

我使用API​​級別7,因此我不能使用locationManager.requestSingleUpdate。 我有兩個問題:

  1. 有沒有什麼辦法來優化這個過程?
  2. 升級到API級別9(並使用locationManager.requestSingleUpdate)會顯着改善流程嗎?我的意思是,它值得升級嗎?
+0

不是一個真正的答案,但我可以告訴你,手機GPS系統有時需要幾分鐘,而不是十秒鐘才能獲得修復(可能取決於手機型號)。一旦找到,未來的修復速度會更快 - 可能在10秒內。也許花費兩三分鐘時間試圖每隔一刻鐘修好一次?或者也許有一些方法可以獲得足夠的細節,以便更快速地判斷是否有良好的信號。 – dhardy

回答

0

NETWORK_PROVIDER如何解釋here? 您可能有一個系統,如果您無法在有限的時間內找到某個位置,這意味着您位於內部或GPS接收不夠好,您可以改用網絡位置。由於使用較少的電池,它至少是一種解決方法或替代方案。但認爲會更低。

+0

感謝您的回答。我已經嘗試過了,結果不太好。但無論如何,它並不能解決原來的問題:我希望能夠在接收良好的情況下使用GPS,並在沒有接收時關閉它。 – uyahalom

+0

您如何將新的拍攝地點存儲在某個地方?如果該值爲空,程序將繼續嘗試,當它填充時,GPS將禁用並顯示新的採用值。然後從那一刻起,你可以計算你的60秒,直到下一次檢查。所以在僞代碼中: 'while true { somevariable = null; while somevariable == null { somevariable = gpslocation;} 等待60秒; }' 或者類似的東西。 –