Geocoder.getFromLocation grpc 在 Android 真实设备上失败



我需要从纬度和经度获取城市和州。地理编码器执行此功能以获取城市和州。但是我仅在Android真实设备上收到以下行java.io.IOException: grpc failed的错误。它在模拟器中工作正常。

new Geocoder(context).getFromLocation(latLng.latitude, latLng.longitude, 1).get(0);

此外,我一直在使用 Asynctask 调用此函数,这在另一篇文章中建议 地理编码器 grpc 在堆栈溢出中失败,但对我来说没有任何效果。

我也重新启动了设备,但仍然失败。

这里需要帮助。提前谢谢。

注意:我在Google Pixel XL,Samsung S6 edge,Samsung S4中进行了测试。

看起来这是Google问题跟踪器中针对真实设备和模拟器报告的持续问题。您可以参考以下错误:

https://issuetracker.google.com/issues/64418751

https://issuetracker.google.com/issues/64247769

不幸的是,谷歌还没有解决这些问题。

作为解决方法,您可以考虑使用地理编码 API Web 服务。请注意,您可以在Github上找到Web服务的Java客户端库:

https://github.com/googlemaps/google-maps-services-java

使用适用于 Web 服务的 Java 客户端库,您可以实现反向地理编码查找,这不会给您带来使用本机 Android 地理编码器时遇到的错误。

Javadoc for client 库位于

https://googlemaps.github.io/google-maps-services-java/v0.2.5/javadoc/

我希望这有帮助!

检查您的互联网连接。正在发生的事情是在搜索和结果渲染之间的某个点,连接要么变慢,要么根本不工作。因此,默认错误是未找到 GRCP。您的代码需要处理此类错误并防止 map

对我来说,这是设备时间。我正在做一些测试,我不得不更改设备时间。必须正确设置设备时间,否则会收到此错误。

这是Android中报告的错误,请检查@xomena链接的答案。

或者,您可以使用 Web 服务。将此添加到 gradle 依赖项:

api 'com.google.maps:google-maps-services:0.10.2'

获取地址的示例代码:

        val geoApiCtx = GeoApiContext.Builder()
            .apiKey(Util.readGoogleApiKey(ctx))
            .build()
        val addresses = GeocodingApi.reverseGeocode(geoApiCtx, loc).await()

当我使用模拟器运行时,我遇到了同样的问题。使用真实设备运行后问题已解决。

建议通过 IntentService 调用地理编码器获取地址。但是,如果您处于快速开发模式并且还不想费心设置服务,则可以使用 try/catch 块。

Kotlin 中的示例:

try{
 val addressList = geocoder.getFromLocationName(locationName, 3)
 
 //...
}catch(e: IOException) {
 when{
  e.message == "grpc failed" -> {/* display a Toast or Snackbar instead*/ }
  else -> throw e
 }
}

我所做的是,我将精度更改为仅GPS,在这种情况下,应用程序没有计算我的位置。我再次将精度更改为高精度,应用程序开始工作,根本没有崩溃。您可以从安卓手机上的位置设置更改GPS精度。

使用模拟器。我必须更新设备上的谷歌播放服务,然后它就起作用了!

相关内容

最新更新