Java Android studio不检查mFusedLocationProviderClient.getLastLocation().addOnSuccessListener并返回当前位置null
我正在尝试从我的应用程序获取更新的位置。但是,我的应用程序不会检查这段代码 成功时公开作废(位置) {}内部mFusedLocationProviderClient.getLastLocation()文件 .addOnSuccessListener(这是一个新的OnSuccessListener(){}并返回空位置。即使我的设备位置已打开,地图也显示了我的位置。访问更新位置的代码如下:Java Android studio不检查mFusedLocationProviderClient.getLastLocation().addOnSuccessListener并返回当前位置null,java,android,google-maps,android-studio,geolocation,Java,Android,Google Maps,Android Studio,Geolocation,我正在尝试从我的应用程序获取更新的位置。但是,我的应用程序不会检查这段代码 成功时公开作废(位置) {}内部mFusedLocationProviderClient.getLastLocation()文件 .addOnSuccessListener(这是一个新的OnSuccessListener(){}并返回空位置。即使我的设备位置已打开,地图也显示了我的位置。访问更新位置的代码如下: protected void onCreate(Bundle savedInstanceState) {
protected void onCreate(Bundle savedInstanceState) {
mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
}
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show();
if (mLocationPermissionGranted) {
getDeviceLocation();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return;
}
mMap.setMyLocationEnabled(true);
}
}
private void getDeviceLocation(){
try {
if(mLocationPermissionGranted) //true in my case
{
mFusedLocationProviderClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
moveCamera(new LatLng(location.getLatitude(),location.getLongitude()),17);
// mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(),location.getLongitude()),12),2000,null);
}
else{
Toast.makeText(MapsActivity.this, "Unable to get current location", Toast.LENGTH_SHORT).show();
}
}
});
}
}catch (SecurityException ex){
}
}
其他一切都是正确的,包括清单权限和gradle依赖项。任何人都可以帮助我解决问题。提前感谢。如果至少有一个客户端连接到融合位置提供程序,它将提供该位置。如果客户端连接,它将立即尝试获取位置。如果您的活动是第一个连接的客户端,并且您调用了
getLastLocation()
,那么可能没有足够的时间让第一个位置进入
getLastLocation()
适用于立即需要位置或根本不需要位置的情况。如果您确实想等待位置,最好使用requestLocationUpdates()
并等待回调,而不是在线程中忙着等待
下面是使用requestLocationUpdates()
不要忘了删除在onStop
或onDestroy
中更新的位置
fusedLocationClient?.removeLocationUpdates(locationCallback)
如果至少有一个客户端连接到Fused Location Provider,则Fused Location Provider将提供位置。如果客户端连接,则它将立即尝试获取位置。如果您的活动是第一个连接的客户端,并且您调用
getLastLocation()
,则可能没有足够的时间让第一个位置进入
getLastLocation()
适用于立即需要位置或根本不需要位置的情况。如果您确实想等待位置,最好使用requestLocationUpdates()
并等待回调,而不是在线程中忙着等待
下面是使用requestLocationUpdates()
不要忘了删除在onStop
或onDestroy
中更新的位置
fusedLocationClient?.removeLocationUpdates(locationCallback)
getLastLocation()
可能会返回null如果位置不可用(这种情况很少发生),则会返回null。getLastLocation()
如果某个位置不可用,可能会返回null,这种情况应该很少发生。null将返回。非常感谢您的回答,问题现在解决了。非常感谢您的回答,问题现在解决了。
fusedLocationClient?.removeLocationUpdates(locationCallback)