我已经成功地使用FusedLocation来获取设备之前的最后一个已知位置,但是我不确定为什么它在这种情况下不起作用。
我已经在物理设备和仿真设备上对其进行了测试。
我实现了播放服务,并在清单中声明了所需的权限。 我还检查了我的应用程序的设备权限,启用的位置,并使用Google Maps确保没有最后一个已知位置。
我在MainActivity类中声明private FusedLocationProviderClient fusedLocationClient;
。
在主要活动onCreate()中:FusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
现在,我正尝试从用户从选项菜单中选择一项时检索上一个已知位置。
if(id == R.id.action_GPS){
fusedLocationClient.getLastLocation().addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if(location != null) {
Geocoder gcd = new Geocoder(context, Locale.getDefault());
try {
List<Address> adrs = gcd.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
} catch (IOException e) {
}
}
在调试'fusedLocationClient.getLastLocation()...“之后,它会跳到最后,并且永远不会到达onSuccess方法。为什么会失败?
答案 0 :(得分:1)
在以下情况下,定位对象可能为null:
lastLocation == null时,您应该请求LocationUpdates
答案 1 :(得分:0)
您可以使用以下方法检查GPS是否处于活动状态
val client = LocationServices.getSettingsClient(this)
val task = client.checkLocationSettings(builder.build())
task.addOnSuccessListener {
//GPS is ON
}
task.addOnFailureListener {
if (it is ResolvableApiException) {
try {
//GPS is OFF
Toast.makeText(this, "Mohon aktifkan GPS anda",
Toast.LENGTH_LONG).show()
} catch (sendEx: IntentSender.SendIntentException) {
// Ignore the error.
}
}
}
也不要忘记检查用户的权限