java - 当提供者是 gps 时返回的位置为空?

标签 java android

我正在尝试在以下代码中检索我当前的位置坐标

LocationManager locationManager= (LocationManager) getSystemService(context);

Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);

provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);

当提供者是“网络”时,我得到位置坐标。

当我更改位置和安全选项中的设置以启用“使用 GPS 卫星”选项时,提供商更改为“gps”。 在这种情况下,返回的位置为空。

这可能是什么原因造成的,如何解决?

最佳答案

GPS 提供商需要一段时间才能修复,尤其是在之前未进行修复的情况下。 getLastKnownLocation 不是阻塞调用,它会等到实际的实时 GPS 定位建立(该定位最多可能需要 1 分钟,具体取决于各种原因)。

此外,出于显而易见的原因,请确保您在室外)。

您首先需要向其请求位置更新,而不是简单地为 GPS 提供商调用 getLastKnownLocation。

下面这篇文章很好的解释了原理:http://developer.android.com/guide/topics/location/obtaining-user-location.html

对于在 Android 上使用位置提供程序进行任何操作的任何人来说,这都是必读的内容。

典型的流程是:

  1. 开始申请。
  2. 开始收听所需位置提供商的更新。
  3. 通过过滤掉新的但不太准确的修复来维持对位置的“当前最佳估计”。
  4. 停止监听位置更新。
  5. 利用最近的最佳位置估计。

查看下面的代码,我们正在初始化一个 MyLocationListener(以跟踪手机的位置),并检索对 LocationManager 的引用。我们正在请求 locationmanager 的位置更新。我们使用 10 米的 minDistance(通知的最小距离间隔)和 35 秒的 minTime(通知的最小时间间隔)。

LocationListener locationListener = new MyLocationListener();
LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 35000, 10, this.locationListener);

实现此功能时,您可能会注意到 MyLocationListener 收到的更新比您预期的要多(给定 minTime 和 minDistance 参数)。以下文章在http://blog.doityourselfandroid.com/2010/12/25/understanding-locationlistener-android/可以帮助您理解原因。

关于java - 当提供者是 gps 时返回的位置为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5674414/

相关文章:

javascript - 无法使用 Java 和 Angular js 在一个请求中上传多张图像

java - 从月份名称中获取月份编号

android - 尝试在使用谷歌驱动器的 android 应用程序(使用 kotlin)webview 中显示在线 pdf 偶尔会产生错误

android - 使用 Android/Firebase 实时数据库时,Single.Create()...blockingGet() 在 RxJava 2.1.3 中挂起

android - 是否有一些 Kotlin 文件的反编译器可以反编译为 kotlin *.kt 文件

java - 如何将-t参数传递给fabric8 docker-maven-plugin?

java - 埃拉托斯特尼筛故障

java - 无法删除 ParseObject

android - 加快 Android Studio 中的运行过程

java - 如何在 Android 中将 PictureDrawable 保存为 JPEG/PNG 文件