【问题标题】:requestSingleUpdate(...) doesn't automatically fetch GPS locationrequestSingleUpdate(...) 不会自动获取 GPS 位置
【发布时间】:2012-05-11 10:15:21
【问题描述】:

如果我们想在 Android 中获得单个 GPS 定位,我们实际上是使用已知函数 requestSingleUpdate() 和 LocationManager.GPS_PROVIDER,对吧?

现在我在打开 GPS 的情况下在我的函数 getLocation() 中执行此操作,但设备不会自动建立连接,除非我手动关闭 GPS 然后再次打开。网络提供商的 requestSingleUpdate() 工作完美,我只是不知道为什么这不适用于 GPS 修复。

这是我源代码的一部分:

getLocation() 由另一个对象每 2 分钟运行一次。在 getLocation() 中,如果 GPS 和网络已打开,它会在第一分钟尝试获取 GPS 定位,然后获取网络位置,如果没有可用的 GPS 定位。

public boolean getLocation() {
    // DEBUG
    Log.d("GPS Connection", "Entering getLocation()");
    gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    networkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

    if(!gpsEnabled && !networkEnabled)
        return false;

    if(gpsEnabled && networkEnabled) {
        // DEBUG
        Log.d("GPS Connection", "Request GPS Data");
        locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, gpsLocationListener, Looper.getMainLooper());
        gpsGetLocationTimeout = new Timer();
        gpsGetLocationTimeout.schedule(new GetNetworkLocation(), GPS_MAX_CONNECTION_TIME_MS);
    }

    ...

【问题讨论】:

    标签: java android gps location


    【解决方案1】:

    来自Android documentation:

    接收最新位置可能需要一段时间。如果 即时位置是必需的,应用程序可以使用 getLastKnownLocation(String) 方法。如果提供者被禁用 用户,将不会收到更新,并且 onProviderDisabled(String) 方法将被调用。只要 再次启用提供程序, onProviderEnabled(String) 方法将 被调用,位置更新将重新开始。

    GPS 可能需要很长时间才能从冷启动中恢复。如果您在室内、在停车场内、被高楼包围、手机很烂,或者 GPS 卫星神有一种有趣的心情,您可能永远也得不到 GPS。

    在某些应用程序中,我们会执行请求 GPS 位置等操作,如果 60 秒后仍未到达,则取消请求,这样我们就不会在 GPS RX 半永久开启的情况下耗尽手机电池.

    您可以请求最后一个已知位置并检查其年龄并确定它是否足够新以供使用。网络定位既快速又便宜(就电池使用而言),一个好的策略是在获得 GPS 之前使用网络定位。

    我在 Android 中编码 GPS 的经验是,GPS 会做它想做的事,这在很多方面都不是文档让您期望的。 GPS 需要被视为可能可用也可能不可用的东西,您的程序的逻辑可以被设计来处理它。

    【讨论】:

    • 无论我是在室内还是室外,我对使用带 GPS 的 requestSingleUpdate(..) 的期望是它应该尝试获取一个位置,该位置应该在通知栏中用闪烁的圆圈图标标记.就我而言,它甚至似乎根本没有执行任何 gps 操作..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多