gpt4 book ai didi

Android GPS 跟踪和 WakeLock

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:06:54 27 4
gpt4 key购买 nike

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

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

我知道我需要在服务中实现跟踪,并且可能会显示通知以使服务保持 Activity 状态。但是,我了解到手机可能随时进入休眠模式,这会停止 GPS 跟踪。

对于这些情况,进行持续后台 GPS 跟踪、手机不会进入休眠状态并且不会消耗太多电量的最佳方法是什么?

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

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

对于场景 2,我可以使用 AlarmManager 安排每 x 分钟检查一次。我的服务需要获取临时唤醒锁,等待单个 GPS 位置,然后停止并再次释放唤醒锁。

这两种方法(永久 WakeLock 与 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...
}
}

}

在您的 list 文件中:

<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...
}
}
}

在您的 list 文件中:

<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

关于Android GPS 跟踪和 WakeLock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7765152/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com