【问题标题】:If GPS cannot fetch location, switch to network in Android如果 GPS 无法获取位置,请在 Android 中切换到网络
【发布时间】:2014-05-05 04:10:23
【问题描述】:

我正在尝试根据 GPS 或网络获取位置,但问题是,如果我根据 GPS 位置进行获取,则需要花费大量时间来获取位置详细信息。因此,我想实现一种方法,如果 GPS 信号非常低,则使用网络提供商获取位置。如何确定 GPS 信号?如果这有问题吗? GPS 信号即使在开阔的天空中也总是很低,因此它总是会到达网络提供商?

我该如何解决这个问题?

【问题讨论】:

    标签: android networking gps


    【解决方案1】:

    您是使用 LocationManager.GetLastKnownLocation 轮询位置,还是通过 requestLocationUpdates 异步获取更新?

    首先,使用 GPS_PROVIDER 查询位置。如果返回null,则查询NETWORK_PROVIDER

    如果您收到通知,请同时请求。然后您可以实现 onStatusChanged 来判断 GPS 何时可用,如果可用则忽略网络更新,如果不可用则使用它们(位置对象告诉您提供者是什么)。

    【讨论】:

    • 我正在使用 requestLocationUpdates 但不是异步的。我在按钮点击中调用它。像这样:locationListener = new MyLocationListener(); locationMangaer.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5,locationListener);然后我打电话给听众。私有类 MyLocationListener 实现 LocationListener { public void onLocationChanged(Location loc) { { Toast.makeText(getBaseContext(),"Location changed:" + loc.getLatitude() + loc.getLongitude(),Toast.LENGTH_SHORT).show();我不知道在哪里检查如果 GPS 数据为空则如何获取 ntw
    • 如果你调用它,它是异步的。 requestLocationUpdates 将不时调用您的侦听器,直到取消。因此,如果没有 GPS 同步,它将永远不会被调用。您需要调用 requestLocationUpdates 两次,一次用于 NETWORK_PROVIDER,一次用于 GPS_PROVIDER。然后,无论何时更新,您都会被调用。如果最近有 GPS 更新,请忽略网络更新。
    • 所以有两个监听器:一个用于 GPS,一个用于网络,如果需要则忽略网络更新:我如何检测 GPS 提供商是否已获取或网络提供商已获取。我应该使用计时器吗?
    • 最好的方法是覆盖 GPS 监听器的 onStatusChanged,看看 GPS 是否可用。除非它确实有锁,否则它将不可用。
    • 你能给我举个例子吗?
    【解决方案2】:

    添加 lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);它将开始使用网络获取 gps。使用 location.getProvider() 您应该能够区分它是 gps 还是网络。

    【讨论】:

      猜你喜欢
      • 2013-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2016-09-24
      相关资源
      最近更新 更多