Android GPS跟踪和WakeLock

时间:2011-10-14 08:46:24

标签: android gps wakelock

我需要在Android手机上进行背景GPS跟踪,我目前正计划有两种情况:

  1. 当手机连接到(车载)充电器时,请经常访问GPS位置(每分钟)。
  2. 当手机未连接充电器时,每5-30分钟仅轮询一次,具体取决于电池受影响的程度。
  3. 我知道我需要在服务中实现跟踪,并且可能会显示通知以保持服务的活跃性。但是,我认为手机可能随时进入睡眠模式,这将阻止GPS跟踪。

    对于这些情况,连续背景GPS跟踪的最佳方式是什么,没有手机进入睡眠状态,而且没有耗电太多?

    到目前为止,我收集了以下内容:

    对于场景1,我可能需要获取一个WakeLock,并始终保持CPU唤醒(但屏幕可能会睡眠)。 MyTracks应用程序似乎是在TrackRecordingService中执行此操作。 OpenGPSTracking似乎做the same

    对于方案2,我可以使用AlarmManager每隔x分钟安排一次检查。我的服务需要获得一个临时的WakeLock,等待一个GPS位置,然后停止并再次释放WakeLock。

    这两种方法(永久WakeLock与AlarmManager)的功耗比较如何?只有每30分钟检查一次,GPS能否在合理的时间内收到准确的位置?

    StackOverflow上有一些相关问题,但没有一个问题令人满意。一些半有用的:

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:5)

  1. 当手机连接到充电器时,你可以获取唤醒锁,因为你计划获得频繁的GPS位置,在这种情况下,AlarmManager似乎不是一个好主意。

  2. 当手机未连接到充电器时,您可以使用闹钟管理器,因为您只需每5-30分钟轮询一次。获取唤醒锁将显着影响您的电池寿命。

  3. 实施取决于你。

    ...干杯!!