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

Android 安卓:在固定间隔内从服务获取GPS位置,android,service,gps,alarmmanager,wakelock,Android,Service,Gps,Alarmmanager,Wakelock,我希望在很长一段时间(3-4小时)内每3分钟从服务接收一次gps数据。 这一切都很好,但我有一些问题,哪种方法是最好的电池寿命 启动服务,在创建服务时创建部分唤醒锁,启动每3分钟执行一次的计时器。从计时器内部获取位置数据。当服务停止时(3-4小时后),释放唤醒锁 使用AlarmManager每3分钟启动一次服务。在服务内部创建部分唤醒锁,获取位置数据,然后释放唤醒锁并停止服务 与#1相同,但通过requestLocationUpdates()方法设置间隔而不是计时器。(我不喜欢这种方法的原因是,

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

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

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

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

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


    AFAIK min time between updates(更新间隔时间)只是一个提示,可能对给定设备实施,也可能不对给定设备实施。AFAIK min time between updates(更新间隔时间)只是一个提示,可能对给定设备实施,也可能不对给定设备实施。
    // 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);