尝试在Android应用程序(Kotlin)中按下按钮时获取最后已知位置



正如标题所述,我想知道按下按钮时的最后一个位置,但它不起作用,我不确定出了什么问题。 在我的安卓清单中,我有:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

对于我的活动,我有:

private lateinit var fusedLocationClient: FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_add_cow)

// updates the variables with these values
Submit.setOnClickListener {
checkPermissions()
getLastKnownLocation()

我正在使用的两种方法是:

private fun checkPermissions() {
val PERMISSION_REQUEST = 10
val permissions = arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
requestPermissions(permissions, PERMISSION_REQUEST)
}

和:

fun getLastKnownLocation() {
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
checkPermissions()
fusedLocationClient.lastLocation.addOnSuccessListener { location ->
if (location != null) {
// use your location object
// get latitude , longitude and other info from this
longitude = location.longitude
latitude = location.latitude
d("getlastknown Lat:", latitude.toString())
d("getlastknown Lon:", longitude.toString())
}
}
}

不能100%确定你会得到最后的已知位置!

在以下情况下,位置对象可能为 null:

  • 位置在设备设置中处于关闭状态。即使之前检索了最后一个位置,结果也可能为 null,因为 禁用位置也会清除缓存。
  • 设备
  • 从未记录其位置,这可能是新设备或已恢复出厂的设备的情况 设置。
  • 设备上的 Google Play 服务已重新启动,并且没有有效的融合位置信息提供程序客户端请求位置信息 服务重新启动后。为避免这种情况,您可以创建一个 新客户端和请求位置会自行更新。

以下是来自官方文档的更多信息

最新更新