10
在Android中获取用户位置的好方法
问题: 尽快使用户的当前位置在阈值之内,同时节省电池。 为什么问题是一个问题: 首先,android有两个提供程序;网络和GPS。有时网络会更好,有时GPS会更好。 “更好”是指速度与精度之比。 如果我几乎可以立即获得位置信息而无需打开GPS,则我愿意牺牲几米的精度。 其次,如果您请求位置更改的更新,并且当前位置稳定,则不会发送任何内容。 Google提供了一个确定“最佳”位置的示例:http : //developer.android.com/guide/topics/location/obtaining-user-location.html#BestEstimate 但我认为这没有应该做的那么好/可能。 我有点困惑,为什么google没有用于位置的标准化API,开发人员不必关心位置的来源,您只需指定所需的内容,然后电话为您选择。 我需要什么帮助: 我需要找到一种确定“最佳”位置的好方法,也许是通过某种启发式方法,或者通过一些第三方库。 这并不意味着确定最佳提供商! 我可能会使用所有提供商,并从中选择最好的提供商。 应用程序的背景: 该应用程序将以固定的时间间隔(假设每10分钟左右)收集用户的位置,并将其发送到服务器。 该应用程序应尽可能节省电池,并且该位置的精度应为X(50-100?)米。 目标是以后能够在一天中在地图上绘制用户的路径,因此我需要足够的准确性。 其他: 您认为期望和接受的精度的合理值是多少? 我一直在使用100m作为可接受的值,并根据需要使用30m,这是个要问的问题吗? 我希望以后能够在地图上绘制用户的路径。 理想的100m和可接受的500m是否更好? 另外,现在我在每次位置更新中最多打开GPS 60秒,如果您在室内,精度可能达到200m,这太短了,无法找到位置吗? 这是我当前的代码,感谢任何反馈(除了缺少错误检查(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()); …