尽快将用户的当前位置置于阈值内,同时节省电池电量.
首先,android有两个提供商; 网络和GPS.有时网络更好,有时GPS更好.
"更好"是指速度与准确度之比.
如果我几乎可以立即获得位置并且不打开GPS,我愿意牺牲几米精度.
其次,如果您要求更新位置更改,则在当前位置稳定时不会发送任何内容.
谷歌有一个确定"最佳"位置的例子:http://developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate
但我认为它不是应该尽可能好的地方/可能.
我有点困惑为什么谷歌没有标准化的位置API,开发者不应该关心位置来自哪里,你应该只指定你想要的东西,手机应该为你选择.
我需要找到一个很好的方法来确定"最佳"位置,也许是一些启发式或者可能通过某些第三方库.
这并不意味着确定最好的提供商!
我可能会使用所有提供商并选择其中最好的.
该应用程序将以固定间隔收集用户的位置(假设每10分钟左右)并将其发送到服务器.
该应用程序应尽可能节省电池,并且位置应具有X(50-100?)米的精度.
目标是以后能够在地图上绘制白天用户的路径,因此我需要足够的准确性.
您认为对于期望和接受的准确度的合理价值是什么?
我一直在使用100米接受,并且根据需要使用30米,这要问多少?
我希望以后能够在地图上绘制用户的路径.
期望100米,接受500米更好吗?
此外,现在我每次更新GPS的时间最长为60秒,如果你在室内的准确度可能超过200米,这个位置太短了吗?
这是我目前的代码,感谢任何反馈(除了缺少错误检查,这是TODO):
protected void runTask() {
final LocationManager locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
updateBestLocation(locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER));
updateBestLocation(locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER));
if (getLocationQuality(bestLocation) != LocationQuality.GOOD) {
Looper.prepare();
setLooper(Looper.myLooper());
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateBestLocation(location);
if (getLocationQuality(bestLocation) != LocationQuality.GOOD)
return;
// We're done …Run Code Online (Sandbox Code Playgroud) 我正在使用GPS数据,每秒获取值并在地图上显示当前位置.问题是有时(特别是当精度很低时)值变化很大,使当前位置在地图中的远点之间"跳跃".
我想知道一些简单的方法来避免这种情况.作为第一个想法,我考虑过准确地丢弃超过一定阈值的值,但我想还有其他一些更好的方法.程序执行此操作的常用方法是什么?