正如标题所述,我想知道按下按钮时的最后一个位置,但它不起作用,我不确定出了什么问题。 在我的安卓清单中,我有:
<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 服务已重新启动,并且没有有效的融合位置信息提供程序客户端请求位置信息 服务重新启动后。为避免这种情况,您可以创建一个 新客户端和请求位置会自行更新。
以下是来自官方文档的更多信息