保持GPS服务启动并优化电池寿命

6
我需要建立一个应用程序,配备GPS跟踪器,运行大约一天。我意识到SO中有类似的问题,但找不到对我提出的一些问题的答案。
- 我需要每10分钟GPS定位一次,所以我认为最好的方法是启动位置服务,获取定位信息(或超时),然后停止服务(使用removeUpdates())。如何编写一个应用程序(或服务或其他),每10分钟运行一次此循环,并确保只要有电池电量剩余它将持续运行(即使设备进入睡眠状态,也应该每10分钟唤醒它以获取定位信息)?使用AlarmManager是一个好主意吗?
- 我能指望这种方法的电池寿命可以持续一天吗?
我已经检查了mytracks,但GPS监听器似乎总是开启,电池预计仅可持续不超过5小时。
我还检查了CWAC Location Poller,但它在超时时只执行removeUpdates()并立即重新启动监听器。而且它在我的情况下使用了wakelock,我认为AlarmManager可能是一个更好的选择。
欢迎任何帮助/建议。
2个回答

4
你说的闹钟管理器我也在使用,非常准确。
    Intent serviceIntent = new Intent(this, TrackerService.class);
    mPendingIntent = PendingIntent.getService(this, 0, serviceIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    alarmManager.cancel(mPendingIntent);
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                System.currentTimeMillis(), interval, mPendingIntent);

在一个获取网络位置的类似应用程序中

间隔是启动服务之间的毫秒数

服务启动、获取位置并关闭

这比等待报告的活动服务耗电更少

我发布的代码会先取消以前的闹钟,因此您不会得到超过1个:)


0
你可以查看被动接收器,它会在其他设备的位置更新时给你一个位置更新 - 仅适用于2.2或更高版本。

2
我不能使用那个,因为如果没有其他应用程序获取位置更新,我将得不到任何信息。 - jul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接