标准类 - Android 位置 - 为啥选择 GPS 提供程序?

Posted

技术标签:

【中文标题】标准类 - Android 位置 - 为啥选择 GPS 提供程序?【英文标题】:Criteria Class - Android Location - Why GPS provider is selected?标准类 - Android 位置 - 为什么选择 GPS 提供程序? 【发布时间】:2013-08-06 11:46:09 【问题描述】:

我对使用特定标准的 getBestProvider 方法的选择算法有疑问。

当轴承和速度的精度设置为中、高或低时;默认情况下,GPS 提供商被选为标准的最佳提供商,这很好,因为网络提供商没有与这些参数相关的任何信息。

但是,即使我在未启用它们的情况下设置了轴承精度或速度精度(将参数启用字段设置为 true);始终调用 GPS 提供程序,即使方位或速度将返回为 0,因为未启用。

因此,在这种情况下,为什么不将网络提供商作为最佳提供商,因为无论如何我们都不会有方位或速度。

如果有人尝试使用设备,这是否会对设备的电池寿命产生任何影响,因为 GPS 会比网络提供商消耗更多的电量。

简短的例子: 标准对象.setBearingRequired (true);

criteriaobject.setBearingAccuracy (Criteria.LOW_ACCURACY);

locationmanagerobject.getBestProvider(criteriaobject, true); // 返回 GPS,这很好

但是;

criteriaobject.setBearingAccuracy (Criteria.LOW_ACCURACY);

locationmanagerobject.getBestProvider(criteriaobject, true); // 再次返回没有意义的 GPS,因为未启用方位,返回的位置根本没有方位,因此 NETWORK 似乎是最好的提供者,但这不是它的工作方式。

对此有何想法或逻辑推理?或者是否会因为这样的实施而对设备的电池寿命产生任何影响?

【问题讨论】:

【参考方案1】:

Google Play Services 使开发人员可以更轻松地开发基于位置的应用程序。就像 ios 中的 CoreLocation 一样,有一个位置提供程序可以满足您的所有需求,无需在 GPS 或其他位置之间进行选择...... 见http://developer.android.com/reference/com/google/android/gms/location/package-summary.html

【讨论】:

谢谢;但我不打算使用 Google 服务;无论如何,这些信息非常有用。另外能否请您详细说明LocationPackage中Accuracy和Horizo​​ntal Accuracy之间的区别 根据文档,setHorizo​​ntalAccuracy()(API 级别 9+)是一个更精细的 setAccuracy()(API 级别 1+),具有不同的常量集。两者都只控制要求的水平精度水平。我不得不承认我没有比较测试这两种方法......【参考方案2】:

那么在这种情况下,为什么不将网络提供商作为最佳提供商,因为无论如何我们都不会有方位或速度。

因为您在 Criteria 中没有任何其他内容可以引导选择算法朝着使用网络提供商的方向发展。

如果有人尝试使用设备,这是否会对设备的电池寿命产生任何影响,因为 GPS 会比网络提供商消耗更多的电量。

如果你关心权力,use setPowerRequirement() on Criteria

【讨论】:

谢谢;我知道这些参数,但我只想知道如果只使用这 2 个参数,而其他参数不变,会有什么影响。无论如何,您能否详细说明 LocationPackage 中 Accuracy 和 Horizo​​ntal Accuracy 之间的区别 @Rob,根据source 他们是一样的。执行setAccuracy() 设置水平精度。然后,在 API 9 中,他们添加了 setVerticalAccuracy() 并希望更容易区分两者。【参考方案3】:

您必须设置方位精度 => NO_REQUIREMENT然后您将获得network作为最佳提供商

通过设置 方位精度 => ACCURACY_LOW 而不是 ACCURACY_HIGH加速 定位时间

【讨论】:

以上是关于标准类 - Android 位置 - 为啥选择 GPS 提供程序?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 Google 地图上的当前位置在 Android 应用中不正确? [复制]

为啥g ++仍然需要-latomic

oracle 11g r2安装到最后为啥会出现问题,求大神解决!

g++ -fno-enforce-eh-specs - 为啥/如何违反 C++ 标准?

为啥 C++ 标准库与编译器而不是操作系统捆绑在一起?

为啥Android会在“新鲜”位置之后返回“陈旧”位置?