Android GPS跟踪和WakeLock

Ral*_*alf 5 gps android wakelock

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

  1. 当手机连接到(车载)充电器时,可以获得频繁的GPS位置(每分钟).
  2. 当手机未连接充电器时,每5-30分钟仅轮询一次,具体取决于电池受影响的程度.

我知道我需要在服务中实现跟踪,并且可能会显示通知以使服务保持活动状态.但是,我认为手机可能随时进入睡眠模式,这将阻止GPS跟踪.

对于这些情况,在没有电话进入睡眠状态且不耗尽太多电量的情况下,连续背景GPS跟踪的最佳方法是什么?

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

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

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

这两种方法的电源使用情况如何比较(永久WakeLock vs AlarmManager)?只检查每30分钟,GPS能否在合理的时间内收到准确的位置?

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

Vin*_*kla 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...
   }
   }

}
Run Code Online (Sandbox Code Playgroud)

在您的清单文件中:

<receiver android:name=".receiver.PowerConnected" >
<intent-filter >
     <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

电源断开时:

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...      
  }
 }
}
Run Code Online (Sandbox Code Playgroud)

在您的清单文件中:

<receiver android:name=".receiver.PowerDisconnected" >
<intent-filter >
   <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

现在你应该service在那里使用并初始化你的GPS.当电源连接使用GPS_Provider别人使用network provider.使用wakelock如果需要的话.

  • 虽然我肯定会使用它,但我觉得它没有回答我关于GPS跟踪最佳策略的核心问题. (2认同)

小智 5

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

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

实施取决于你.

干杯....!!