Android gps getlastknownlocation 返回空指针异常
Posted
技术标签:
【中文标题】Android gps getlastknownlocation 返回空指针异常【英文标题】:Android gps getlastknownlocation returns null pointer exception 【发布时间】: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 时,我会为我的应用程序获取解决方案。
【问题讨论】:
【参考方案1】:某些设备不支持 getLastKnownLocation(例如我的 Motorola XT720)。您必须自己实现 LocationListener 并将 onLocationChanged 中的位置更新保存到数据库或 sharedpreferences 中。当 getLastKnownLocation 为空时,使用保存的位置。
编辑: 这种方法的主要问题是当用户移动很多时它是不准确的。另一种解决方案是编写一个服务女巫火灾,例如每小时一次的位置管理器,保存结果,然后您将在旧设备上每小时更新一次“最后位置”。
【讨论】:
并不是他们不支持它——而是他们可能没有。跟踪可能已关闭很长时间,因此没有保存位置。如果您要请求更新,请在收到更新后使用它,它会正确返回。这适用于所有设备。 我的设备从来没有 lastLocation,无论我何时请求它 - 始终为空。即使我在 onLoctionChange 之后或在使用其他使用 GPS 的应用程序之后询问。 我没有专门测试这些设备之一,但它的工作方式是,如果结果陈旧或从未有过,GLKL 将返回 NULL,并且将返回非-null 如果它有一个足够新鲜。我倾向于怀疑它是否完全损坏,尽管我相信某些设备可能根本不会返回结果,除非 GPS 已打开。无论哪种方式,都有比写入共享首选项更好的方法 - 当他需要它时,他应该调用 requestSingleUpdate。 @MateuszJablonski 如何在android中实现onLocationChangeListener。你能帮帮我吗.. 跟随指南:developer.android.com/guide/topics/location/…以上是关于Android gps getlastknownlocation 返回空指针异常的主要内容,如果未能解决你的问题,请参考以下文章
在 GPS 芯片长时间处于活动状态后,Android 设备需要重启/重启才能获取 GPS 位置