如何修复从 android 中的 FusedLocationProviderClient 获取空位置值

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

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

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

【讨论】:

以上是关于如何修复从 android 中的 FusedLocationProviderClient 获取空位置值的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中将当前位置作为纬度和经度?

如何修复 Android 上的图像下载/保存错误

如何修复 Genexus 中的 Android 编译错误?

如何修复解析 XML:android 中的未绑定前缀

如何修复 Android.harware.Camera 中的 setParameters 失败?

如何修复 Android 模拟器中的“无法连接到相机服务”异常