【发布时间】:2019-08-19 10:44:52
【问题描述】:
我正在尝试使用 FusedLocationProviderClient 和 Kotlin Coroutines 请求新位置。这是我目前的设置:
class LocationProviderImpl(context: Context) : LocationProvider, CoroutineScope {
private val TAG = this::class.java.simpleName
private val job = Job()
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.IO
private val fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context)
private val locationRequest = LocationRequest().apply {
numUpdates = 1
priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
override suspend fun getLocation(): LatLng = suspendCoroutine {
val locationCallback = object : LocationCallback() {
override fun onLocationResult(result: LocationResult) {
result.lastLocation.run {
val latLng = latitude at longitude
it.resume(latLng)
}
fusedLocationProviderClient.removeLocationUpdates(this)
}
}
try {
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper())
} catch (e: SecurityException) {
throw NoLocationPermissionException()
}
}
}
但在尝试请求新位置时,出现以下异常:
java.lang.IllegalStateException: Can't create handler inside thread that has not called Looper.prepare()
但是,如果我调用 Looper.prepare() (最终调用 Looper.quit() )是不是意味着我只能调用该函数一次?
感谢任何帮助。
【问题讨论】:
标签: android kotlin fusedlocationproviderapi kotlin-coroutines