Android 中 getLastKnownLocation 返回 null

2023-12-13

我知道这个问题已经被讨论过很多次了,但是没有任何东西可以帮助我解决 getLastKnownLocation 返回 null 的问题。

我的活动实现 LocationListener:

public class MainActivity extends Activity implements
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener, LocationListener {

我的 onCreate 方法中有这个:

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

然后我尝试像这样获取用户位置(也在 onCreate 中):

    // Getting the Co-ordinates of the users current location
    Location location = lm
            .getLastKnownLocation(LocationManager.GPS_PROVIDER);

    if(location != null){
        longitude = location.getLongitude();
        latitude = location.getLatitude();
    }

我当时尝试过:

@Override
public void onLocationChanged(Location location) {      
    longitude = location.getLongitude();
    latitude = location.getLatitude();
}

我错过了什么吗?

编辑:仍然不起作用,但我尝试过的代码:

    if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    while (location == null) {
        if (counter > MAX_TIME) {   
        }
        else {
            try {
                 location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            counter += 1000;
        }
    }
    }

来自文档:

“返回一个位置,指示从给定提供商获得的最后一个已知位置修复的数据。

退货 提供者的最后已知位置,或 null ”

因此,必须至少有一个使用所提供的提供程序获得的先前位置。为了让它接收位置,您必须使用该提供商至少注册一次更新并接收实际更新。之后,getLastKnownLocation 将返回该值。如果您想注册其他应用程序提供的位置,请使用 Location.PASSIVE_PROVIDER。

希望这可以帮助。

编辑:正如我上面评论的那样,放入一个 while 循环,迭代 30 秒,并每秒检查该位置是否不再为空。您需要这种情况至少发生一次,然后才能使用 getLastKnownLocation,AFAIK。

使用未经测试的小示例进行编辑。最好将所有这些也放在 AsyncTask 中,即放在 doInBackground 中。请注意,我假设您正在存储 Location 对象本身,而不是将其分为经度和纬度:

if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
    long final MAX_TIME = 30000;
    long counter = 0;
    while (location == null) {
        if (counter > MAX_TIME) {
            return False;
        }
        Thread.sleep(1000);
        counter += 1000;
    }
} else {
    return False;
}

编辑:记住,位置是在 onLocationUpdate(Location location) 中更新的。一旦 this 已更新,您就会有一个不等于 null 的位置对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 中 getLastKnownLocation 返回 null 的相关文章

随机推荐

  • 导航栏/选项卡集具有反应性面板编号,但不渲染所有内容

    这个问题似乎是重复的 但让我解释一下为什么不是 我想创造一个闪亮的navbarPage具有固定元素和反应数tabPanels 对其他输入元素做出反应 关于如何创建响应式有很多问题tabsetPanels navbarPages但他们主要是为
  • 如何使用 jQuery 找到元素的绝对位置?

    有没有办法使用 jQuery 查找元素的绝对位置 即相对于窗口开头的位置 offset 将返回元素的偏移位置作为简单对象 例如 var position element offset position left 42 top 567 您可以
  • 以正确方式实现 Android Studio 3.6 时出现的 MultiDex 问题

    我将 Android Studio 更新到 3 6 在一个项目中 我遇到了 MultiDex 问题 并且不断收到此错误Calligraphy和另一个图书馆 E AndroidRuntime FATAL EXCEPTION main Proc
  • Rails:引导下拉菜单不起作用

    我对 Rails 还很陌生 并且一直在关注 Michael Hartl 的教程 一切都进展顺利 直到我进入下拉菜单 该菜单不起作用 然后起作用 现在不起作用 我已经阅读了几篇文章和修复程序 我怀疑我的修修补补已经开始了很简单 我已经做了一些
  • 将 Html.RadioButtonFor 与布尔值一起使用并不是写 Checked="Checked"

    我在使用 RadioButtonFor 帮助程序时遇到问题 当传入的值为 true 时 它 不会在任一单选按钮中显示 检查 当值为 false 时 它 工作得很好 我从我正在处理的项目中复制了这段代码并创建了一个示例应用程序 并且我能够复制
  • DCL 还坏吗?

    据我了解 旧的 JMM 实现惰性单调的 DCL 双重检查锁定 技巧已被破坏 但我认为新的 JMM 和易失性字段已修复它 然而在this不错的文章 显然足够新 可以引用新旧 JMM 和 DCL 中的易失性字段 指出它仍然损坏 我到处读到它已修
  • Spring CORS 不存在“Access-Control-Allow-Origin”标头

    将 web xml 移植到 java 配置后遇到以下问题 No Access Control Allow Origin header is present on the requested resource Origin http loca
  • 反序列化数据不起作用

    过去 5 个小时我一直在做这个 我被难住了 尝试了最荒谬的功能来尝试修复它 但无济于事 我正在从 WP 数据库检索数据 在插入之前 数据已使用以下方法序列化了 1 个数组 serialize 来自 PHP 的函数 然后使用 WP 函数将其插
  • Cocoa Touch,使用哪个:窗口模板还是视图模板?

    我还有另一个与视图相关的问题 我最终在这里处理视图和 Windows 的一般问题 我对 iPhone 开发的所有基础知识的理解都被颠覆了 有人可以解释或指出这两个模板之间的区别吗 例如 我的应用程序在界面生成器中不显示窗口 我应该拥有一个吗
  • 从主机名获取服务器IP地址

    当执行一个NSURLRequest对于主机名 是否可以获得响应来自的服务器的 IP 地址 The NSURL method NSString host 只是返回主机名 我看不出有什么办法可以从其他任何一个获取 IP 地址NSURL方法 也许
  • Java:使用 >、< 和 == 比较对象

    是否可以使用运算符正确比较对象 gt lt and 在Java中 我已经实施了Comparable我的一个对象中的接口 这样可以节省一些时间 而且写起来也很好 if obj1 lt obj2 do sth 代替 if obj1 compar
  • 张量流中二维数组最小值到最大值的排序

    我有一个数组 x1 tf Variable 0 51 0 52 0 53 0 94 0 35 0 32 0 72 0 83 0 74 0 55 0 23 0 72 0 63 0 64 0 35 0 11 0 02 0 03 0 14 0 1
  • 增加 OS X Lion 中的堆栈大小

    我需要为需要大量堆栈的 C 程序执行此操作 我使用 g 包含在 OS X Lion 中 来编译它 我怎样才能为我的程序增加它 From http developer apple com library mac qa qa1419 index
  • 从java中的字符串中解析负前缀整数

    您好 我有一个类似于 10 1 30 2 的字符串 我想读取空格之间的数字 我可以使用 FOR 语句和代码来做到这一点 Character toString myString charAt i and Integer parseInt my
  • R markdown asis 破坏了有效的 html 代码

    我有一个输出可以正确渲染的 html 代码的函数 但是将其封装在带有 results asis 的 markdown 文档 R 代码块中失败 我将问题追溯到 HTML 代码中的空格 我喜欢这些空格 因为它们使阅读原始 HTML 文件变得更容
  • 将子节点追加到父节点中

    我需要将子节点附加到父节点中 order h下的order no等于order d的下一个兄弟节点 应该合并到父节点order h 这是 XML
  • 如何将 H2 控制台连接到嵌入式 Spring H2 DB

    好的 我正在开发一个简单的应用程序 其中有 Spring Embedded H2 数据库用于开发 database xml bean 配置如下所示
  • 如何仅显示手机联系人(不包括SIM卡联系人)

    我正在构建一个用户界面 需要在列表视图中显示电话联系人列表 我在用着ContactsContract Data和CursorLoader加载数据 然后将光标绑定到自定义适配器 扩展自SimpleCursorAdapter 这里的问题是我不知
  • 将字符串转换为特定格式的日期

    如何在 SQL Server 2008 R2 中将字符串转换为日期类型 我的字符串已格式化dd mm yyyy 我试过这个 SELECT CAST 01 08 2014 AS DATE 但这确实是演员阵容mm dd yyyy format
  • Android 中 getLastKnownLocation 返回 null

    我知道这个问题已经被讨论过很多次了 但是没有任何东西可以帮助我解决 getLastKnownLocation 返回 null 的问题 我的活动实现 LocationListener public class MainActivity ext