Android 请求位置更新不稳定

标签 android location

我在我的应用程序中使用教程等中的以下代码,从 GPS(或者如果 GPS 未打开,则从网络)获取最佳位置修复,然后将其显示在文本字段中。

crit = new Criteria();
context = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(context);
crit.setAccuracy(Criteria.ACCURACY_FINE);
crit.setPowerRequirement(Criteria.POWER_LOW);
crit.setAltitudeRequired(false);
crit.setBearingRequired(false);
crit.setSpeedRequired(false);
crit.setCostAllowed(false);
try {
    bestProvider = locationManager.getBestProvider(crit, true);
    loc = locationManager.getLastKnownLocation(bestProvider);
    locationManager.requestLocationUpdates(bestProvider, 0, 0,
            new GeoUpdateHandler());
} catch (java.lang.RuntimeException run) {
    Toast.makeText(getBaseContext(),
    "Waiting for location fix...", Toast.LENGTH_SHORT).show();
}

我的问题是在不同地点之间移动。我开始在诺福克使用我的应用程序并确定位置。第二天,我在康沃尔郡(相距 100 英里),当我打开应用程序时(此时它应该已被 Android 关闭/销毁),它仍然向我显示诺福克的位置。我发现如果我退出我的应用程序并再次启动它,它就会选择新位置。我可以轻松做到这一点,但我的用户发现这确实很痛苦。

我的假设是,如果 GPS/网络可用,那么我启动应用程序,从最后一个已知位置创建 LOC,然后 locationManager 立即更新(这应该立即更新 LOC?),使用:

public class GeoUpdateHandler implements LocationListener {
  public void onLocationChanged(Location location) {
    loc = location;
  }
  public void onProviderDisabled(String provider) { }
  public void onProviderEnabled(String provider) {  }
  public void onStatusChanged(String provider, int status, Bundle extras) { }
}

显然此更新没有发生。

谁能告诉我我的代码是否愚蠢,或者建议更好的方法来确保我始终处理当前位置?谢谢。如果这个问题得到解答,我们深表歉意,在有关位置和 requestLocationUpdates 标签的所有帖子中很难找到。

最佳答案

经过聊天讨论后,我提出以下建议:

您需要调用 requestLocationUpdates(),然后向用户显示一个对话框,其中包含“获取您的位置”之类的内容。一段时间后,您应该会收到包含最新位置的回调 onLocationChanged()。此时,您可以关闭该对话框并更新文本字段以及您想要向用户显示的任何其他内容。获得最新位置后,您还应该调用 removeUpdates(),以免耗尽用户的电池。

关于Android 请求位置更新不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10929676/

相关文章:

javascript - PhoneGap 垃圾收集

android - Aakash 平板电脑的 USB 供应商 ID

java - setPixel 在位图周围留下黑色边框,如何避免?

android - 按位置限制 Android Market 应用程序

Android M Google api 客户端位置速度始终为 0 和 location.hasSpeed false

c# - GeoIpLocation - 如何获取州和县? (或者,如何从邮政编码获取州和县)C#

android - 在谷歌地图上沿道路或多段线移动标记

java - Android 检查服务器是否响应 "is"JSON

Android 为什么以所需格式解析日期时间需要大约 50-60 毫秒?

c++ - 如何在 Windows 上使用 Qt C++ 从一个地理地址获取纬度/经度?