1

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

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

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

但我不断得到这个位置(特拉维夫,特拉维夫,以色列),而特拉维夫还不够小,无法通过这个条件。

我错过了什么?怎么了?

4

1 回答 1

3

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

确切的Location参数取决于那个特定的来源Location,即它是如何获得的以及使用什么地理位置来源。例如:

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

您将从定位服务获得的准确度表示距报告位置的距离(以米为单位),在获得该位置的那一刻,设备可能处于该位置。

因此(如果我正确理解您的问题),我认为您使用的是获取当前设备位置的低准确度方法。您只需切换到Location更准确的来源。

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

  1. 您位于多个 Wi-Fi 网络的范围内。您向定位服务询问设备位置。范围内的所有 Wi-Fi 网络恰好位于位置服务数据库中。因此,定位服务能够以相当准确的方式获取您的位置。
  2. 您位于多个 Wi-Fi 网络的范围内。然而,它们中的任何一个都不为定位服务所熟知,因为它们的起源(城镇)是已知的,但它们的确切位置和范围是未知的。在这种情况下,定位服务能够告诉您您所在的国家/城镇,但不知道您的确切位置。反过来,位置服务可以为您提供不准确的位置。

您必须通过测试是否完全可用,为这种情况做好准备。您可以通过发出Location.hasAccuracy(). 如果返回值为false则不能调用Location.getAccuracy()(实际上可以调用,但要注意 - 它会返回0!)。所以,你的情况应该更像:

if (this.location != null && this.location.hasAccuracy() && this.location.getAccuracy() < 700) {
    // do something
}
于 2013-01-20T14:42:35.100 回答