使用getAccuracy错误

时间:2013-01-20 14:27:35

标签: java android geolocation

我正在建立一个基于位置的应用程序,我想避开这种位置:“特拉维夫,特拉维夫,以色列”,这是非常不准确的。

在使用位置之前,我使用以下条件:

if(!(this.location == null || this.location.getAccuracy() > 700))
    // use the location

但我一直在这个地方(特拉维夫,特拉维夫,以色列),特拉维夫不小到可以通过这个条件。

我错过了什么?怎么了?

1 个答案:

答案 0 :(得分:3)

您尚未指定涉及的几个参数,但我会尝试一下。

确切的Location参数取决于特定Location的来源,即如何获取和使用哪些地理定位源。例如:

  • 如果您使用GPS,则Location将具有可靠的accuracy值。
  • 如果您使用蜂窝网络广播电台(BTS),您所获得的准确度将仅限于全球BTS数据库,其位置和范围。
  • 如果您使用Wi-Fi网络及其报告的信号强度,则准确度将取决于Wi-Fi网络数据库的质量。不幸的是,这样的数据库维护和创建并不便宜。例如,Google购买此类数据库并使用Google街景汽车扫描此类网络。
  • 如果您使用基于公共IP地址的本地化,您的准确性将仅限于城镇,因为这是IANA IP地址空间注册表中包含的最准确信息。此外,它可以通过使用代理服务器来愚弄。

您从位置服务获得的准确度表示距离获取位置时设备可能位于报告位置的距离(以米为单位)。

所以(如果我理解你的问题),我认为你使用低精度的方法获得当前的设备位置。您只需更准确地切换到Location来源。

另请注意,位置服务使用的位置获取方法(即用于查找上述位置的服务)实际上可能无法为返回的{{1>提供准确性 }}。要理解我的意思,考虑以下场景及其两个结果 - 请注意,它们都来自基于Wi-Fi网络的相同定位方法:

  1. 您在多个Wi-Fi网络的范围内。您询问位置服务有关设备位置的信息。范围内的所有Wi-Fi网络恰好位于位置服务DB中。因此,定位服务能够以相当准确的方式获得您的位置。
  2. 您在多个Wi-Fi网络的范围内。然而,它们中的任何一个都不是众所周知的位置服务,因为它们的起源(城镇)是已知的,但它们的确切位置和范围是未知的。在这种情况下,位置服务可以告诉您您所在的国家/地区,但不知道您的确切位置。反过来,位置服务可以为您提供一个没有准确性的位置。
  3. 您必须通过测试是否准确无误来做好准备。您可以通过发出Location来执行此操作。如果返回的值为Location.hasAccuracy(),则无法调用false(实际上您可以,但请注意 - 它会返回Location.getAccuracy()! )。所以,你的情况应该更像:

    0