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