如何修复从 android 中的 FusedLocationProviderClient 获取空位置值
Posted
技术标签:
【中文标题】如何修复从 android 中的 FusedLocationProviderClient 获取空位置值【英文标题】:How do i fix the getting null location value from FusedLocationProviderClient in android 【发布时间】:2019-09-29 11:28:52 【问题描述】:我一直在尝试使用 android 中的 FusedLocationProviderClient 获取当前位置数据。我总是在位置变量上得到空值,我该如何解决?
我已尝试按照 FusedLocationProviderClient 的 android 开发者网站的步骤进行操作,但没有帮助。
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
Toast.makeText(context, "Location permission Required", Toast.LENGTH_SHORT).show();
else
mFusedLocationClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>()
@Override
public void onSuccess(Location location)
if (location != null)
mLocation = location;
Log.d(TAG, "getLocation: "+mLocation.getLatitude()+","+mLocation.getLongitude());
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(20 * 1000);
locationCallback = new LocationCallback()
@Override
public void onLocationResult(LocationResult locationResult)
super.onLocationResult(locationResult);
if (locationResult == null)
return;
else
for (Location location : locationResult.getLocations())
if (location != null)
mLocation = location;
Log.d(TAG, "getLocation: "+mLocation.getLatitude()+","+mLocation.getLongitude());
;
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
Toast.makeText(context, "No Location Permission", Toast.LENGTH_SHORT).show();
else
mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());
);
我希望这段代码返回当前位置数据。
【问题讨论】:
【参考方案1】:没有什么可修复的,这是预期的行为。如果系统知道,getLastLocation 返回最后一个位置。它几乎从不知道。所以它几乎总是返回null。如果您想获得确定的位置,请使用 requestLocationUpdates。但是你永远不能依赖 getLastLocation 工作,即使它工作,数据也可能是旧的。它真的应该只在非常有限的情况下使用。
【讨论】:
先生,我从代码中删除了 lastlocation 部分,但我仍然在 location 变量处得到 null【参考方案2】:如果Android System
不知道其最后位置,getLastLocation()
将返回 null。要向 System
提供最后位置,您可以尝试以下操作之一:
在打开您的应用之前,打开 Google 地图 并让设备获取当前 位置。之后,您可以返回到您的应用程序。
Android
中的Location
服务提供3种模式。检查High
准确度模式。转到设置 -> 位置 -> 高精度模式。
【讨论】:
以上是关于如何修复从 android 中的 FusedLocationProviderClient 获取空位置值的主要内容,如果未能解决你的问题,请参考以下文章