gpt4 book ai didi

android - HMS FusedLocationProvider 和 HuaweiMap 不工作

转载 作者:行者123 更新时间:2023-12-04 13:36:04 30 4
gpt4 key购买 nike

我使用这个类来为我的 map 应用程序获取设备的当前位置。我将它与 GooglePlayServices 一起使用并且工作正常,但我最近切换到 HMS华为设备 if GooglePlayServices在设备上不可用。我替换了所有 GooglePlayServices带有来自 HMS 的镜像对象的类导入的lib,它编译没有错误。但是当我要求当前位置时,它不会返回任何东西。没有异常(exception),没有成功或失败。

我没有收到回电 onLocationResult()catch()堵塞。
根据调试器调用的最后一行是 val task = lp.requestLocationUpdates(lr, this, Looper.getMainLooper())
有人有这个问题吗?这显然是一个新问题。在 Huawei P40 上进行测试在哪里 GooglePlayServices不是 可用的。

此外,HuaweiMap 不在 Release模式下工作。 getMapAsync()不会返回 onMapReady()打回来。它卡在那里。但是如果我切换 Debug模式,它就可以正常工作。

UDPATE:
华为 map 正在运行。更新了proguard。但是位置仍然无法正常工作。即使在 Debug模式下它也不起作用。

代码:

private inner class LocationCbHua(val lp: com.huawei.hms.location.FusedLocationProviderClient,
val onFailure: (()->Unit)? = null,
val onSuccess: (GpsLocation)->Unit)
: com.huawei.hms.location.LocationCallback() {

init {
val lr = com.huawei.hms.location.LocationRequest.create().apply {
priority = com.huawei.hms.location.LocationRequest.PRIORITY_HIGH_ACCURACY
interval = 200
}
val lsr = com.huawei.hms.location.LocationSettingsRequest.Builder().run {
// setAlwaysShow(true) // TEST
addLocationRequest(lr)
build()
}
val check = com.huawei.hms.location.LocationServices.getSettingsClient(activity!!).checkLocationSettings(lsr)
check.addOnCompleteListener {
try {
check.getResultThrowException(com.huawei.hms.common.ApiException::class.java)
val task = lp.requestLocationUpdates(lr, this, Looper.getMainLooper())
task.addOnFailureListener {
onFailure?.invoke()
}
} catch (e: com.huawei.hms.common.ApiException) {
when (e.statusCode) {
com.huawei.hms.location.LocationSettingsStatusCodes.RESOLUTION_REQUIRED-> if(!locationResolutionAsked){
// Location settings are not satisfied. But could be fixed by showing the user a dialog.
try {
// Cast to a resolvable exception.
val re = e as com.huawei.hms.common.ResolvableApiException
// Show the dialog by calling startResolutionForResult(), and check the result in onActivityResult().
re.startResolutionForResult(mainActivity, MainActivity.REQUEST_LOCATION_SETTINGS)
locationResolutionAsked = true
} catch (e: Exception) {
e.printStackTrace()
}
}
com.huawei.hms.location.LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE->{
// Location settings are not satisfied. However, we have no way to fix the settings so we won't show the dialog.
App.warn("Location is not available")
onFailure?.invoke()
}
}
}
}
}

fun cancel(){
lp.removeLocationUpdates(this)
currLocCb = null
}

override fun onLocationResult(lr: com.huawei.hms.location.LocationResult) {
cancel()
val ll = lr.lastLocation
onSuccess(GpsLocation(ll.longitude, ll.latitude))
}
}

最佳答案

可能的原因如下:

执行 checkLocationSettings 代码后,在执行代码时捕获到异常 check.getResultThrowException .但是,捕获的错误代码不是 6 (RESOULTION_REQUIRED) .

因此,代码 com.huawei.hms.location.LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE被直接处死举报Location is not available代码后com.huawei.hms.location.LocationSettingsStatusCodes.RESOLUTION_REQUIRED-> if(!locationResolutionAsked)被处决。

结果,既没有得到异常,也没有得到定位结果。建议您在 when (e.statusCode) 处添加代码行记录错误日志,然后继续错误分析。

关于android - HMS FusedLocationProvider 和 HuaweiMap 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62005307/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com