奇怪的 LocationListener 通过 GPS 提供程序行为 Android:“updateGps:GPS 已打开,但未接收修复”

Posted

技术标签:

【中文标题】奇怪的 LocationListener 通过 GPS 提供程序行为 Android:“updateGps:GPS 已打开,但未接收修复”【英文标题】:Weird LocationListener through GPS provider behavior Android : "updateGps : GPS is on, but not receiving fixes" 【发布时间】:2012-01-08 01:39:28 【问题描述】:

我有一个可以很好地通过 LocationListener 获取用户 GPS 位置的应用程序。我可能已经改变了一些东西,但它不再起作用了。

该错误似乎与提供程序 LocationManager.GPS_PROVIDER 有关,如果我使用的是 LocationManager.NETWORK_PROVIDER,它可以工作。所以我认为问题与GPS有关。我可以在日志中看到一些奇怪的东西:

1-28 16:52:23.120: D/StatusBarPolicy(2815): [GPS ICON] updateGps : GPS is on, but not receiving fixes

清单中的权限没问题:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

我找不到更多相关信息。

我已经在我的 Eclipse 和设备上尝试了基本的清理/重启(我没有在模拟器上进行测试)。我快要生气了,有人知道在那之前要尝试什么吗?

编辑:

这里有一些愚蠢的简单代码也不起作用。我错过了什么吗?

package com.mytest;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

public class GPSTestActivity extends Activity implements LocationListener 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LocationManager locationManager = (LocationManager) this
                .getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

        Log.v("test", "launched");
    

    @Override
    public void onLocationChanged(Location location) 
        Log.v("test", "location received ! "+location.getLatitude()+";"+location.getLongitude());
    

    @Override
    public void onProviderDisabled(String provider) 
        Log.v("test", "location provider disabled");

    

    @Override
    public void onProviderEnabled(String provider) 
        Log.v("test", "location provider enabled");

    

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) 
        Log.v("test", "location provider status changed");

    

编辑:见 Daniele 的回答 cmets

【问题讨论】:

“尝试什么?” - 为什么不把手机带到外面看看会发生什么? 完成,见 Daniele 的回答 cmets... 它什么都没有改变 我建议您从 Android Market 下载免费应用程序“GPS Test”并将其安装在设备上。它会显示有多少颗卫星是可见的和正在使用的,以及信号的 SNR。 我大部分时间都在视图中看到不止一颗卫星,但没有使用。 @Aster,您需要至少 4 颗具有良好 SnR 的可见卫星,并且您必须等待 10 - 20 分钟。如果手机已连接到互联网,您可以在 2 分钟内得到修复。 【参考方案1】:

您在建筑物内吗?会不会是 GPS 根本无法修复?如果它以前有效,那是(可能)因为您正在从 GPS 读取最后一个已知位置。你的问题描述让我觉得没有问题...

丹尼尔

【讨论】:

是的,我在建筑物内,但 Google 地图可以访问 GPS 位置。 Google 地图可能正在使用缓存的 GPS 位置。听起来您的 GPS 收音机确实无法修复。 我强烈认为事实并非如此。我在同一个位置,在同一个办公室,距离 2 厘米的玻璃窗不到一米...... 我走了一圈,100% 确定它没有与建筑物中的 GPS 模块相连。 问题是我的设备工作不正常,GPS 没有发送任何值。恢复出厂设置解决了这个问题。

以上是关于奇怪的 LocationListener 通过 GPS 提供程序行为 Android:“updateGps:GPS 已打开,但未接收修复”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 LocationListener 变为空?

Android 位置:PendingIntent 与 LocationListener

locationListener + manager 与 GoogleServices + locationClient

android:LocationListener 永久运行

带有 locationListener 回调的 Android 服务

LocationListener 没有提供任何速度更新