0

我一直在尝试使用 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());
                }}
        });

我希望此代码返回当前位置数据。

4

2 回答 2

2

没有什么可修复的,这是预期的行为。如果系统知道,getLastLocation 返回最后一个位置。它几乎从不知道。所以它几乎总是返回null。如果您想获得确定的位置,请使用 requestLocationUpdates。但是你永远不能依赖 getLastLocation 工作,即使它工作,数据也可能是旧的。它真的应该只在非常有限的情况下使用。

于 2019-05-12T05:45:40.267 回答
0

如果不知道其最后位置,则返回 null。要向 提供最后位置,您getLastLocation()可以尝试以下操作之一:Android SystemSystem

  1. 在打开你的应用之前,打开谷歌地图,让设备获取当前位置。之后你就可以返回你的应用了。

  2. Location服务Android提供3种模式。检查高精度模式。转到设置 -> 位置 -> 高精度模式

于 2019-05-12T06:40:23.720 回答