requestSingleUpdate(...)不会自动获取GPS位置

Yan*_*ald 1 java gps android location

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

现在我正在我的函数getLocation()中打开GPS,但设备不会自动建立连接,除非我手动关闭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);
    }

    ...
Run Code Online (Sandbox Code Playgroud)

mwe*_*ler 6

Android文档:

收到最近的位置可能需要一段时间.如果需要立即位置,应用程序可以使用getLastKnownLocation(String)方法.如果用户禁用了提供程序,则不会收到更新,并将调用onProviderDisabled(String)方法.只要再次启用提供程序,就会调用onProviderEnabled(String)方法并再次启动位置更新.

GPS可能需要很长时间才能从冷启动中获得.如果你在室内,在停车场,高楼大厦周围,有一个蹩脚的电话,或者如果GPS卫星神在一个有趣的心情,你可能永远不会得到GPS.

在某些应用程序中,我们会执行诸如请求GPS位置之类的操作,然后如果它在60秒后没有到达,则取消请求以便我们不会在半永久性地留下GPS RX时杀死手机的电池.

您可以请求最后的已知位置并检查其年龄并确定它是否足够使用.网络位置快速且便宜(就电池使用而言),一个好的策略是使用网络位置,直到你获得GPS.

我在Android中编码GPS的经验是,GPS将做它想做的事情,这在很多方面都不是文档所能带来的.GPS需要被视为可能有或没有可用的东西,并且程序的逻辑可以设计为处理它.

  • 无论我是室内还是室外,我对使用带有GPS的requestSingleUpdate(..)的期望是它应该尝试在通知栏中找到一个应该用闪烁的圆圈图标标记的位置.在我的情况下,它似乎甚至没有执行任何gps动作.. (2认同)