2011-10-14 127 views
5

我需要做一個Android手機上的背景GPS跟蹤,目前我打算有兩種方案:Android的GPS跟蹤和激活鎖定

  1. 當手機連接到(汽車)充電器,得到頻繁的GPS位置(每分鐘)。
  2. 當手機沒有連接到充電器時,每5-30分鐘只能輪詢一次位置,具體取決於電池的受影響程度。

我知道我需要在服務中實現跟蹤,並且可能會顯示一條通知來保持服務的活躍狀態。不過,我認爲手機可能會隨時進入睡眠模式,這會停止GPS跟蹤。

對於這些場景,什麼是連續背景GPS跟蹤的最佳方式,沒有手機進入睡眠狀態,並且不會消耗太多的功率?

到目前爲止,我收集了以下內容:

對於方案1,我可能需要獲得一個激活鎖定,並保持清醒的CPU所有的時間(但屏幕可以睡覺)。 MyTracks應用程序似乎在TrackRecordingService中執行此操作。 OpenGPSTracking似乎做the same

對於方案2,我可以使用AlarmManager安排每x分鐘的檢查。我的服務需要獲取一個臨時WakeLock,等待一個GPS位置,然後停止並再次釋放WakeLock。

這兩種方法(永久性WakeLock與AlarmManager)的功耗比較如何?在每30分鐘檢查一次的情況下,GPS是否能夠在合理的時間內獲得準確的位置?

在StackOverflow上有幾個相關的問題,但沒有滿意的答案。一些半有用的:

回答

5
  1. 當手機連接到充電器u能獲得激活鎖定爲如果計劃獲得頻繁的GPS位置,AlarmManager在這種情況下似乎不是一個好主意。

  2. 當手機沒有連接到充電器時,您可以使用報警管理器,因爲您只會每5-30分鐘輪詢一次地點。獲取喚醒鎖將會顯着影響你的電池壽命。

實施取決於你。

乾杯.... !!

+0

任何想法wakelock多少影響電池?如果每隔幾分鐘纔會完成一次購買地點需要多長時間? – Ralf

+0

使用此API會嚴重影響設備電池壽命。除非您確實需要它們,否則不要購買WakeLocks,儘可能使用最低等級,並且一定要儘快將其釋放。 http://developer.android.com/reference/android/os/PowerManager.html#ACQUIRE_CAUSES_WAKEUP – Rohit

6

如果連接了電源,您可以使用廣播接收器並相應地執行操作。

對於電源連接:

public class PowerConnected extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 
    if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_CONNECTED")){ 
     //Initialize your listener here... 
    } 
    } 

} 

在您的清單文件:

<receiver android:name=".receiver.PowerConnected" > 
<intent-filter > 
    <action android:name="android.intent.action.ACTION_POWER_CONNECTED" /> 
</intent-filter> 
</receiver> 

當電源斷開:

public class PowerDisconnected extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    if(intent.getAction().equalsIgnoreCase("android.intent.action.ACTION_POWER_DISCONNECTED")){ 
    //Do your task here...  
    } 
} 
} 

在您的清單文件:

<receiver android:name=".receiver.PowerDisconnected" > 
<intent-filter > 
    <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /> 
</intent-filter> 
</receiver> 

現在您應該使用service並在那裏初始化您的GPS。連接電源時使用GPS_Provider,否則使用network provider。如果需要,請使用wakelock

+0

謝謝,這很有用。 – Ralf

+0

你應該接受答案,否則它將浮動爲未答覆。謝謝.. –

+2

雖然我一定會使用它,但我覺得它並沒有回答我的核心問題,即GPS跟蹤的最佳策略是什麼。 – Ralf