我使用此类来获取地图应用程序设备的当前位置。我在GooglePlayServices
上使用了它,并且可以正常工作,但是如果设备上没有HMS
,我最近将华为设备切换到GooglePlayServices
。我用GooglePlayServices
导入的lib中的镜像对象替换了所有HMS
类,并且编译时没有错误。但是当我要求当前位置时,它将不会返回任何内容。没有例外,没有成功或失败。
我没有收到对onLocationResult()
或catch()
块的回调。根据调试器,最后一行称为val task = lp.requestLocationUpdates(lr, this, Looper.getMainLooper())
有人遇到这个问题吗?这显然是新问题。在[Huawei P40
不可用的GooglePlayServices
上进行测试。此外,HuaweiMap在发布模式下也不起作用。 getMapAsync()
将不会返回onMapReady()
回调。它卡在那里。但是,如果我切换调试模式,则它可以正常工作。
UDPATE:
HuaweiMap现在正在工作。更新了proguard。但是位置仍然无法正常工作。即使在调试模式下,它也不起作用。代码: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))
}
}
我使用此类来获取地图应用程序设备的当前位置。我在GooglePlayServices上使用了它,并且工作正常,但是如果GooglePlayServices ...