LocationCallback 不检索纬度或经度

问题描述 投票:0回答:0

我是 Android Studio 的新手。我正在尝试将有关纬度和经度的更新坐标打印到我的 XML 文件中的 TextView 上。这不是权限问题,因为它完全可以正常工作。但假设我重新获得 lastLocation 并尝试将这些值放到 textViews 上,屏幕上没有打印任何内容。

class MainActivity : AppCompatActivity() {

companion object {
    const val ACCESS_FINE_LOCATION = 0
    const val ACCESS_COARSE_LOCATION = 1
}

private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
private lateinit var mFusedLocationClient: FusedLocationProviderClient
private lateinit var mLocationRequest: LocationRequest
private lateinit var mLocationCallback: LocationCallback


override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    when (requestCode) {
        ACCESS_FINE_LOCATION -> {
            if((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)){
                Toast.makeText(this, "permission granted :)", Toast.LENGTH_LONG).show()

            }else{
                Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show()
            }
            return
        }
    }

}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    setSupportActionBar(binding.toolbar)
    mLocationRequest = createLocationRequest()
    binding.gpsButton.setOnClickListener{
        checkLocationPermission()
        if (ActivityCompat.checkSelfPermission(
                this,
                Manifest.permission.ACCESS_FINE_LOCATION
            ) == PackageManager.PERMISSION_GRANTED
        ) {
            mLocationCallback = object : LocationCallback(){
                override fun onLocationResult(locationResult: LocationResult) {
                    startLocationUpdates()
                    super.onLocationResult(locationResult)
                    val location = locationResult.lastLocation
                    Log.i("LOCATION", "Location update in the callback: $location")
                    if(location!=null){
                        binding.elevacion.text = location.altitude.toString()
                        binding.longitud.text = location.longitude.toString()
                        binding.latitud.text = location.latitude.toString()
                    }
                }
            }
        }
    }

}

private fun createLocationRequest(): LocationRequest {
    val locationRequest: LocationRequest = LocationRequest.Builder(
        Priority.PRIORITY_HIGH_ACCURACY,
        10000
    )
        .setMinUpdateIntervalMillis(5000)
        .build()

    //locationRequest.setFastestInterval(5000)
    return locationRequest
}

private fun startLocationUpdates() {
    if (ActivityCompat.checkSelfPermission(
            this, Manifest.permission.ACCESS_FINE_LOCATION
        ) == PackageManager.PERMISSION_GRANTED
    ) {
        mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.getMainLooper())
    }
}

我尝试尽可能多地遵循 locationCallback() 的文档,但仍然无法在所需的 TextView 上打印它,所以这让我觉得我搞错了。我的问题可以概括为在使用 locationCallback 时根本不检索坐标,这是必须的,因为我想要反映更新的位置。

android location google-play-services
© www.soinside.com 2019 - 2024. All rights reserved.