我有点迷失在这里..基本上我需要以最快,最轻的方式获得用户的一般位置。这是我的代码
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锁定并返回到我的应用程序,但它仍然崩溃..
答案 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()));
}