Android:通过固定Intervall从服务获取GPS位置

Dom*_*icM 0 service gps android alarmmanager wakelock

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

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

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

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

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

小智 5

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