Android:在固定时间间隔内从服务获取GPS位置

时间:2014-01-29 10:44:49

标签: android service gps alarmmanager wakelock

我希望长时间(3-4小时)从服务中每3分钟收到一次gps数据。 这一切都很好,但我有一些问题,哪种方法最适合电池寿命。

  1. 启动服务,在服务的onCreate内创建一个部分唤醒锁,启动一个每3分钟执行一次的计时器。从计时器内部获取位置数据。当服务停止时(3-4小时后)释放唤醒锁。

  2. 使用AlarmManager每3分钟启动一次服务。在服务内部创建部分唤醒锁,获取位置数据,然后释放唤醒锁并停止服务。

  3. 与#1相同,但通过requestLocationUpdates()方法设置intervall而不是计时器。 (我不喜欢这种方法的原因是,当我使用计时器时,我可以获得5个位置(每3分钟)并选择最准确的但是当我使用requestLocationUpdates()设置intervall时我只获得一个位置,哪个可能不准确,或者我错了?)

  4. 我不喜欢将部分唤醒锁留在3-4小时的想法,这就是为什么我认为#2可能是更好的解决方案。

1 个答案:

答案 0 :(得分:5)

// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000; // 1 sec
LocationManager locationManager; 
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                         MIN_TIME_BW_UPDATES,
                                         MIN_DISTANCE_CHANGE_FOR_UPDATES, this);