我有一个后台线程需要每1小时获取一次GPS位置。 最好的方法是什么?
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000*60*60,0, this);
让线程休眠一小时,然后注册更新,并在收到位置后
removeUpdates(...)
LocationManager.NETWORK_PROVIDER
和LocationManager.GPS_PROVIDER
之间有什么区别。
答案 0 :(得分:0)
使用Location API而不是使用LocationManager。它提供了更好的准确性,节省了更少的电力,并且更快地获得了位置。
答案 1 :(得分:0)
从GPS消费的角度来看,你的第二个选择是最好的选择。但是让线程休眠一小时我会使用周期= 1小时的计时器。如果您不能认为您的应用程序将在该小时内保持活动状态,则您希望存储最后一次显示的位置时间。下次检查系统时间戳并将其与永久存储上的上次位置时间进行比较后,您的应用程序会被唤醒。如果超过小时,您可以立即要求一个位置,然后继续使用计时器。如果小时尚未过去,您计算时差并启动一个计时器,该计时器具有该差异的初始延迟,并且周期为1小时。 但是sanswr并没有处理如何让你的应用程序保持活跃状态,它从功耗的角度告诉你,更好的是只在你需要它的那个短时间内启用GPS。
获取GPS位置需要20-40秒 您应该设置最高准确度。 (全球定位系统) 启用GPS并接收有效位置后,检查水平准确度 保持GPS启用,直到精度达到所需阈值(例如<15m)。 然后禁用GPS。
使用该解决方案,GPS每小时仅需要大约一分钟的电力,这可以忽略不计。
答案 2 :(得分:-1)
您可以使用Criteria,根据需要进行自定义。
指示选择位置提供程序的应用程序条件的类。提供商可以根据准确性,用电量,报告高度,速度和方位的能力以及货币成本进行订购。
代码示例:
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
String provider = locationManager.getBestProvider(criteria, true);
查看how to use locationmanager,how to specify Criteria和how getBestProvider method works以供参考