1

我有点迷路了。基本上我需要以最快、最轻、可能的方式获取用户的大致位置。这是我的代码

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);                 
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_LOW);

provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));

昨天它对我来说非常有效,但今天我在Log.d尝试访问时收到空指针错误location。我将应用程序发送给了两个朋友,它在他们的手机上运行良好。有什么我可以更改以使代码更健壮的吗?什么可能导致我的手机崩溃?

编辑 - 我在地图中获得了 gps 锁定并返回我的应用程序,但它仍然崩溃..

4

4 回答 4

2
Location location = locationManager.getLastKnownLocation(provider);

这并不总是返回一个位置。事实上,它给了很多次NULL

您必须始终检查位置是否为NULL.

if(location != null){
      Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));
}

空位置的原因可能是provider's LastKnownLocation已过期(旧时间戳)。

于 2013-04-03T05:40:39.933 回答
1

如果您在此处查看参考https://developer.android.com/reference/android/location/LocationManager.html#getLastKnownLocation(java.lang.String);你会看到getLastKnownLocation

返回提供者的最后一个已知位置,或 null

所以是的,你的location对象有时可能是空的。我不知道为什么会这样,但确实如此。我有一种感觉,在设备长时间未使用定位服务后,这种情况会更频繁地发生。

于 2013-04-03T05:40:26.230 回答
1

您的标准很可能导致网络位置,当 Wifi 不可用时,使用手机信号塔,因此如果您使用的数据超过限制,可能会产生费用。因此对于网络来说,成本是真实的。因此,如果你改变

criteria.setCostAllowed(true);  

你会没事的。

于 2013-04-03T05:43:15.690 回答
0

您的位置为空,因此您可能会收到错误

if(location != null){
      Log.d(TAG,"Lat - " + (location.getLatitude()) + " long - " + (location.getLongitude()));
}

位置演示

于 2013-04-03T05:43:31.693 回答