为了账号安全,请及时绑定邮箱和手机立即绑定

获取用户在Android中的位置的好方法

获取用户在Android中的位置的好方法

噜噜哒 2019-08-06 12:44:31
获取用户在Android中的位置的好方法问题:尽快将用户的当前位置置于阈值内,同时节省电池电量。为什么问题是一个问题:首先,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米,这个位置太短了吗?
查看完整描述

3 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

要为您的应用选择正确的位置提供程序,您可以使用Criteria对象:

Criteria myCriteria = new Criteria();myCriteria.setAccuracy(Criteria.ACCURACY_HIGH);myCriteria.setPowerRequirement(Criteria.POWER_LOW);// let Android select the right location provider for youString myProvider = locationManager.getBestProvider(myCriteria, true); // finally require updates at -at least- the desired ratelong minTimeMillis = 600000; // 600,000 milliseconds make 10 minuteslocationManager.requestLocationUpdates(myProvider,minTimeMillis,0,locationListener);

阅读requestLocationUpdates的文档,了解有关如何考虑参数的更多详细信息:

可以使用minTime和minDistance参数来控制通知的频率。如果minTime大于0,则LocationManager可能会在位置更新之间休息minTime毫秒以节省电量。如果minDistance大于0,则仅当设备移动minDistance米时才会广播位置。要尽可能频繁地获取通知,请将两个参数都设置为0。

更多的想法

  • 您可以使用Location.getAccuracy()监视Location对象的准确性,该值返回以米为单位的估计位置精度。

  • Criteria.ACCURACY_HIGH标准应该给你100米以下的误差,这不如GPS可以,但符合你的需要。

  • 您还需要监视位置提供程序的状态,并在用户不可用或禁用时切换到另一个提供程序。

  • 被动提供商也可能是这种应用的良好匹配:这个想法是利用位置更新时,他们被另一个应用程序和广播系统范围的要求。


查看完整回答
反对 回复 2019-08-06
  • 3 回答
  • 0 关注
  • 357 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信