我需要在Android手机上进行背景GPS跟踪,我目前正计划有两种情况:
我知道我需要在服务中实现跟踪,并且可能会显示通知以保持服务的活跃性。但是,我认为手机可能随时进入睡眠模式,这将阻止GPS跟踪。
对于这些情况,连续背景GPS跟踪的最佳方式是什么,没有手机进入睡眠状态,而且没有耗电太多?
到目前为止,我收集了以下内容:
对于场景1,我可能需要获取一个WakeLock,并始终保持CPU唤醒(但屏幕可能会睡眠)。 MyTracks应用程序似乎是在TrackRecordingService中执行此操作。 OpenGPSTracking似乎做the same。
对于方案2,我可以使用AlarmManager每隔x分钟安排一次检查。我的服务需要获得一个临时的WakeLock,等待一个GPS位置,然后停止并再次释放WakeLock。
这两种方法(永久WakeLock与AlarmManager)的功耗比较如何?只有每30分钟检查一次,GPS能否在合理的时间内收到准确的位置?
StackOverflow上有一些相关问题,但没有一个问题令人满意。一些半有用的:
答案 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)
当手机连接到充电器时,你可以获取唤醒锁,因为你计划获得频繁的GPS位置,在这种情况下,AlarmManager似乎不是一个好主意。
当手机未连接到充电器时,您可以使用闹钟管理器,因为您只需每5-30分钟轮询一次。获取唤醒锁将显着影响您的电池寿命。
实施取决于你。
...干杯!!