如何确保 getLastLocation().isSuccessful()

How to make sure that getLastLocation().isSuccessful()

我正在尝试 getLastLocation(),但有时它是 null。发生这种情况时,我会转到 google 地图一秒钟,然后 return 转到我的应用程序,99% 都可以。还有一款应用程序仅适用于您所在的 return 城市,即使我的应用程序无法 getLastLocation(),它也能正常工作。我注意到当我使用其他应用程序或 google 地图或天气应用程序时,位置图标会在短时间内出现在状态栏中,但当我使用我的应用程序时该图标永远不会出现,所以我'我猜这可能是问题所在?

我需要做什么来确保我的位置为 != null?

还有一件事,有时我得到了我的位置(纬度和经度),但由于 List 是空的,所以反向地理编码会被捕获?如何确保它始终不为空?

我使用的代码只是 android 开发人员的 copy/past。

如果您使用的是 Android 模拟器,除非您打开地图应用程序,否则预计位置不会更新。

为确保获得 non-null location,您需要 request for location updates

你可以这样做

@SuppressLint("MissingPermission")
    private fun getLastKnownLocation() {

        // get last known location from fusedLocationProviderClient returned as a task

        fusedLocationProviderClient.lastLocation
            .addOnSuccessListener { lastLoc ->
                if (lastLoc != null) {

                    // initialize lastKnownLocation from fusedLocationProviderClient
                    lastKnownLocation = lastLoc

                    

                } else {

                    // prompt user to turn on location
                    showLocationSettingDialog()

                    // when user turns on location trigger updates to get a location
                    fusedLocationProviderClient.requestLocationUpdates(
                        locationRequest, locationCallback, Looper.getMainLooper()
                    )
                }

                // in case of error Toast the error in a short Toast message
            }
            .addOnFailureListener {

                Toast.makeText(requireActivity(), "${it.message}", Toast.LENGTH_SHORT).show()

            }
    }

这只是一个存根,您需要处理权限,创建 FusedLocationProviderClientLocationRequestLocationCallbackObject。

您可能还需要提示用户打开位置设置

请向我们展示您的地理编码代码以进一步阐述。