【问题标题】:How do i fix the getting null location value from FusedLocationProviderClient in android如何修复从 android 中的 FusedLocationProviderClient 获取空位置值
【发布时间】: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());
                }}
        });

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

【问题讨论】:

    标签: android android-gps fusedlocationproviderclient


    【解决方案1】:

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

    【讨论】:

    • 先生,我从代码中删除了 lastlocation 部分,但我仍然在 location 变量处得到 null
    【解决方案2】:

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

    1. 在打开您的应用之前,打开 Google 地图 并让设备获取当前 位置。之后,您可以返回到您的应用程序。

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

    【讨论】:

      猜你喜欢
      • 2018-06-08
      • 1970-01-01
      • 2021-02-01
      • 2017-12-13
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多