我正在开发一个Android应用程序(使用Kotlin),需要每2-3秒访问用户的位置。在过去的几天里,我一直在研究(和测试)解决方案,但我似乎只找到了Java中的例子(不容易翻译成Kotlin)。我也无法从Android的教程中理解它。
我已经做了什么:
- 请求权限(前台&背景GPS位置访问)
- 在尝试使用它之前确保它们已被接受
- 实现
onLocationChanged()
方法 - 访问最后一个位置(并使用它)
我想更新位置,这样,通过访问最后一个位置,我可以使用Android知道的最新位置。
这是我尝试过的,我认为可能更接近实际的解决方案(但这绝对是错误的):
val locationListener: LocationListener = this
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 5000, 10, locationListener
)
正确的做法是什么?谢谢你。
这对我有用,不要忘记先请求gps许可:
package com.example.gpsexample
import android.annotation.SuppressLint
import android.content.Context
import android.content.Context.LOCATION_SERVICE
import android.location.LocationManager
class LocationUpdates(context: Context) {
private val mGpsLocationClient: LocationManager =
context.getSystemService(LOCATION_SERVICE) as LocationManager
@SuppressLint("MissingPermission")
fun start(){
mGpsLocationClient.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
0L ,
0f ,
locationListener
)
}
private val locationListener =
android.location.LocationListener { location -> //handle location change
println(location)
}
}
首先,您可以在Kotlin中使用java代码,android Studio将自动如果您复制粘贴Java代码,请将Java转换为kotlin。
为谷歌地图更新你使用新的谷歌地图api。检查这些链接来实现新的谷歌地图api请求:https://stackoverflow.com/a/62155149/16728174https://developers.google.com/maps/documentation/android-sdk/start
对于位置更新使用Interval:
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5);
mLocationRequest.setFastestInterval(1);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
查看此链接获取有关setfaststinterval ();的信息和setInterval ();差异:https://stackoverflow.com/a/26407873/16728174