0

我开始使用 FusedLocationClient,但我不确定为什么我需要 OnSuccessListener 和 LocationCallback。不应该只是其中之一就足够了吗?

private void initLocationCallback(Context context) {
    fusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
    fusedLocationClient.getLastLocation()
            .addOnSuccessListener(new OnSuccessListener<Location>() {
                @Override
                public void onSuccess(Location location) {
                    onLocationChanged(location);
                }
            });

    locationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            if (locationResult != null) {
                for (Location location : locationResult.getLocations()) {
                    if (location != null) {
                        onLocationChanged(location);
                    }
                }
            }
        }
    };
    LocationRequest locationRequest = LocationRequest.create();
    locationRequest.setInterval(INTERVAL);
    locationRequest.setFastestInterval(FASTEST_INTERVAL);
    fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, context.getMainLooper());  
}
private void onLocationChanged(Location location) {
    // use location...
}
4

2 回答 2

0

根据获取时的文档lastKnownLocation()OnSuccessListener在极少数情况下 Location 可能为空也应该足够了。

我也在使用的个性OnSuccessListener()

于 2019-04-23T09:13:02.783 回答
0

如果您对此时用户的确切位置不感兴趣,那么 lastKnownLocation() 和 OnSuccessListener 就足够了,您不需要 LocationCallback。

但是,如果您想要精确的位置并且想要定期更新以防用户在移动,那么您需要实现 LocationCallback 以不断获取位置更新。在这种情况下,您通常需要最后一个已知位置,因为获取位置更新可能需要一些时间。

于 2019-04-23T13:41:03.330 回答