【问题标题】:Android gps getlastknownlocation returns null pointer exceptionAndroid gps getlastknownlocation 返回空指针异常
【发布时间】:2014-08-25 00:39:15
【问题描述】:

在我的活动中,我需要使用 gps 获取手机的当前位置。我使用了以下代码:

Location gpslocation;
LocationManager lmanager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
gpslocation= lmanager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

//error in the next line as follows java.lang.nullpointerexception

gpslatitude=gpslocation.getLatitude();
gpslongitude=gpslocation.getLongitude();

我知道 getlastknownlocation 将获取上次修复 gps 的位置。在这种情况下 getlastknownlocation 返回一个空指针。这就是为什么出现异常并且我的应用程序强制关闭的原因。另外我知道还有另一种使用 onlocationchanged 获取 gps 坐标的方法。但要使其正常工作,设备必须处于移动状态一段距离。由于在我的应用程序中我想以固定方式获取 gps 坐标,有没有其他方法可以在 android 中使用 gps 获取 gps 坐标。

我不想使用网络提供商,因为它只会提供距离我当前位置的实际位置约 5 公里的地点坐标。所以我不鼓励在我的应用程序中使用网络位置。因为 5 公里的距离对我来说不是可接受的范围。有没有其他方法可以使用代码修复 gps 坐标。在那里,当使用 lastknownlocation 时,我会为我的应用程序获取解决方案。

【问题讨论】:

    标签: android networking gps geolocation latitude-longitude


    【解决方案1】:

    某些设备不支持 getLastKnownLocation(例如我的 Motorola XT720)。您必须自己实现 LocationListener 并将 onLocationChanged 中的位置更新保存到数据库或 sharedpreferences 中。当 getLastKnownLocation 为空时,使用保存的位置。

    编辑: 这种方法的主要问题是当用户移动很多时它是不准确的。另一种解决方案是编写一个服务女巫火灾,例如每小时一次的位置管理器,保存结果,然后您将在旧设备上每小时更新一次“最后位置”。

    【讨论】:

    • 并不是他们不支持它——而是他们可能没有。跟踪可能已关闭很长时间,因此没有保存位置。如果您要请求更新,请在收到更新后使用它,它会正确返回。这适用于所有设备。
    • 我的设备从来没有 lastLocation,无论我何时请求它 - 始终为空。即使我在 onLoctionChange 之后或在使用其他使用 GPS 的应用程序之后询问。
    • 我没有专门测试这些设备之一,但它的工作方式是,如果结果陈旧或从未有过,GLKL 将返回 NULL,并且将返回非-null 如果它有一个足够新鲜。我倾向于怀疑它是否完全损坏,尽管我相信某些设备可能根本不会返回结果,除非 GPS 已打开。无论哪种方式,都有比写入共享首选项更好的方法 - 当他需要它时,他应该调用 requestSingleUpdate。
    • @MateuszJablonski 如何在android中实现onLocationChangeListener。你能帮帮我吗..
    猜你喜欢
    • 2014-07-03
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多