【问题标题】:Keeping a GPS service alive and optimizing battery life保持 GPS 服务正常运行并优化电池寿命
【发布时间】:2011-10-24 08:18:36
【问题描述】:

我必须构建一个运行大约一天的 GPS 跟踪器的应用程序。我知道 SO 中有类似的问题,但我还没有找到一些问题的答案。

-我需要每 10 分钟进行一次 GPS 定位,所以我认为最好的方法是启动定位服务,获得修复(或超时)并停止服务(使用removeUpdates())。我怎样才能让应用程序(或服务或其他任何东西)每 10 分钟运行一次这个周期,并确保只要有一些电池剩余它就会继续运行(即使设备进入睡眠状态,它也应该每 10 分钟唤醒一次以得到修复)?使用 AlarmManager 是个好主意吗?

-我可以期望电池使用这种方法可以使用一天吗?

我已经检查了mytracks,但 gps 监听器似乎始终处于开启状态,并且电池预计可持续使用不超过 5 小时。

我还检查了CWAC Location Poller,但它只在超时时执行removeUpdates() 并立即重新启动侦听器。它还使用唤醒锁,而在我的情况下,我认为 AlarmManager 可能是一个更好的主意。

欢迎任何帮助/建议

【问题讨论】:

    标签: android gps


    【解决方案1】:

    你对我使用的警报管理器很满意

        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 个 :)

    【讨论】:

      【解决方案2】:

      您可以查看Passive Receiver 每当设备位置更新时,它都会为您提供位置更新 - 仅适用于 2.2 或更高版本

      【讨论】:

      • 我不能使用它,因为如果没有其他应用程序获取位置更新,我将什么也得不到。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多