首页 > 解决方案 > 使用 fused 的 Android 位置更新返回 null。如何确保我从前台活动中获得它?

问题描述

我在前台活动中需要该位置一次。但我得到一个空响应。

奇怪的是,一旦我打开谷歌地图,位置回调就会返回一个有效对象。谷歌地图在做什么而我不是?如何确保前台活动中的值不为空?

代码:

@SuppressLint("MissingPermission")
fun getLastLocation(): LiveData<Location> {
    registerLocationUpdates()
    try {
        this.getFusedLocationProviderClient(context).lastLocation.addOnSuccessListener { loc: Location? ->
            if (loc != null) {
                util.toast(util.getStringRes(R.string.fetching_location, "${loc.latitude}, ${loc.longitude}"))
                postValue(loc)
            } else util.toast(util.getStringRes(R.string.null_location))
        }.addOnFailureListener { e: Exception ->
            Log.e(LocationModule::class.java.canonicalName, e.toString())
        }
    } catch (ex: Exception) {
        Log.e(LocationModule::class.java.canonicalName, ex.toString())
    }
    return this
}

private fun getFusedLocationProviderClient(context: Context): FusedLocationProviderClient {
    if (fusedLocationProviderClient == null) fusedLocationProviderClient =
        LocationServices.getFusedLocationProviderClient(context)
    return fusedLocationProviderClient!!
}

标签: androidgoogle-mapsfusedlocationproviderapiandroid-fusedlocation

解决方案


推荐阅读