无法获取经度和纬度kotlin android



这是我的代码:

private var longitude = ""
private var latitude = ""

在oncreateView中,我必须对我的纬度和经度数据进行api调用。但是纬度和经度的值永远不会改变!

//location
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(requireActivity())
//        getCurrentLocation
checkPermissions()
//CALL API
val request = Request.Builder()
.url(" API_PATH?latitude=$latitude&longitude=$longitude")
.build()
val client = OkHttpClient()
...
private fun checkPermissions(){
if(ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) !=
PackageManager.PERMISSION_DENIED){
ActivityCompat.requestPermissions(requireActivity(), arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION), 1)
}
else{
getLocations()
}
}
private fun getLocations() {
if (ActivityCompat.checkSelfPermission(
requireContext(),
Manifest.permission.ACCESS_FINE_LOCATION
) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(
requireContext(),
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
// TODO: Consider calling
//    ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
//   public void onRequestPermissionsResult(int requestCode, String[] permissions,
//                                          int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return
}
fusedLocationProviderClient.lastLocation.addOnCompleteListener {
if(it == null){
Toast.makeText(requireContext(), "sorry can't get the location", Toast.LENGTH_SHORT).show()
}else it.apply {
latitude = it.result.latitude.toString()
longitude = it.result.longitude.toString()
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if(requestCode== 1){
if(grantResults.isNotEmpty() && grantResults[0]==PackageManager.PERMISSION_GRANTED){
//permission granted
if(ContextCompat.checkSelfPermission(requireContext(), Manifest.permission.ACCESS_COARSE_LOCATION) ==
PackageManager.PERMISSION_GRANTED){
Toast.makeText(requireContext(), "Permission granted", Toast.LENGTH_SHORT).show()
getLocations()
}
}else{
Toast.makeText(requireContext(), "Permission denied", Toast.LENGTH_SHORT).show()
//denied permission
}
}
}

首先,我在checkPermissions((中输入始终在第一个条件中。我不知道为什么。其次,我还尝试在checkPermissions((中的第一个if中的第一条条件中写入getLocations((。但是经度和纬度永远不会更新。你能帮我吗?我处理这个案子已经很长时间了,我不知道。

  1. 我认为您总是在checkPermissions((中输入第一个条件,因为您尚未授予权限
  2. 我认为您需要请求注释掉TODO代码的权限

它将类似于:

// You can directly ask for the permission.
requestPermissions(CONTEXT,
arrayOf(Manifest.permission.REQUESTED_PERMISSION),
REQUEST_CODE)

从中找到https://developer.android.com/training/permissions/requesting

我希望这能引导你朝着正确的方向前进。

如果你想作弊进行测试,你可以转到"设置"->应用程序->您的应用程序->权限并启用权限,然后重新测试。当然,在发布应用程序之前,您必须为应用程序的用户在代码中完成请求。

最新更新