Android - 位置管理器 - 奇怪的崩溃问题

时间:2013-04-03 05:36:33

标签: android locationmanager

我有点迷失在这里..基本上我需要以最快,最轻的方式获得用户的一般位置。这是我的代码

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 个答案:

答案 0 :(得分:2)

Location location = locationManager.getLastKnownLocation(provider);

这并不总是返回一个位置。事实上它多次提供NULL

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

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

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

答案 1 :(得分:1)

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

  

返回提供程序的最后已知位置,或null

所以,你的location对象有时可能为空。我不知道它为什么会发生,但确实如此。我觉得在设备没有使用位置服务的很长一段时间后,它会更频繁地发生。

答案 2 :(得分:1)

您的标准最有可能导致网络位置,当Wifi不可用时,则使用手机信号塔,因此如果您使用的数据超出限制,可能会降低成本。因此对于网络而言,成本是真实的。因此,如果你改变

criteria.setCostAllowed(true);  

你会好的。

答案 3 :(得分:0)

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

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

Location Demo