Java Android studio不检查mFusedLocationProviderClient.getLastLocation().addOnSuccessListener并返回当前位置null

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) {

我正在尝试从我的应用程序获取更新的位置。但是,我的应用程序不会检查这段代码

成功时公开作废(位置) {}内部mFusedLocationProviderClient.getLastLocation()文件 .addOnSuccessListener(这是一个新的OnSuccessListener(){}并返回空位置。即使我的设备位置已打开,地图也显示了我的位置。访问更新位置的代码如下:

  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)