我是 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 时根本不检索坐标,这是必须的,因为我想要反映更新的位置。