Android Geocoder 是不是仅适用于互联网连接?

Posted

技术标签:

【中文标题】Android Geocoder 是不是仅适用于互联网连接?【英文标题】:Does Android Geocoder work only with internet connection?Android Geocoder 是否仅适用于互联网连接? 【发布时间】:2013-04-21 22:53:08 【问题描述】:

我正在尝试使用 onMapLongClickListener(LatLng 点)在 Google 地图上获取点击的地址,使用该点的 lat 和 lng 并使用地理编码器将它们转换为地址。如果我已连接,它可以正常工作到 Internet,但如果我不是应用程序崩溃,因为 getFromLocation 方法给出了 null 结果。 所以我想 Geocoder 类只在启用连接的情况下工作。是这样吗?有没有办法让地址保持离线状态?

这是方法的代码:

public void onMapLongClick(LatLng point) 
            List<Address> addresses = null;
            try 
                addresses = geocoder.getFromLocation(point.latitude, point.longitude, 1);
             catch (IOException e) 
                e.printStackTrace();
            
            String address = addresses.get(0).getAddressLine(0);
            String city = addresses.get(0).getAddressLine(1);
            String country = addresses.get(0).getAddressLine(2);
            String str = address + ", " + city + ", " + country;
            gMap.addMarker(new MarkerOptions()
            .position(point)
            .title("Clicked Point")
            .draggable(false)
            .snippet(address + ", " + city + ", " + country));
            Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
            v.vibrate(50);
            

这些是权限:

<uses-permission android:name="com.example.mappine.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.VIBRATE" />

【问题讨论】:

我确信某处有人提供离线地理编码数据库,但有人不是 Google,他们的产品可能不是免费的。 Google 的地理编码 API 有条件免费(参见 here)。 【参考方案1】:

是的。您知道完整的地理编码器需要多少数据吗?您不会将其存储在手机上。

【讨论】:

地理编码器需要将世界上的所有地址(或至少应用程序使用的区域)映射到经纬度坐标。这是很多数据。 然而,像 TomTom、Navigon 等地理编码提供商已经通过将离线地理编码数据与其 Android 应用程序捆绑并将其安装在您的 Android 设备上来做到这一点。我看不出离线地理编码数据有什么大惊小怪的。通过 Internet 连接使用反向地理编码仅适用于那些有大数据计划的人。那些使用有限数据计划的人最好使用离线数据选项。 这笔交易是三件事。首先,它占用了很多空间来保证任何真正的准确度——我们说的是演出。您在这些应用程序中的子集有限。其次,准确性下载的版本不是最新的。第三,他询问了一个特定的地理编码器。那个没有离线模式。如果您想提供一个,则必须使用另一项服务,而不是 Google 的。

以上是关于Android Geocoder 是不是仅适用于互联网连接?的主要内容,如果未能解决你的问题,请参考以下文章

geocoder.getFromLocationName 仅返回 null

android:scaleType="fitCenter" 是不是仅适用于修复 Layout_width 和 Layout_height 属性?

Android Autofill 仅适用于来自 onFillRequest 而不是来自身份验证活动的响应

geocoder.geocodeAddressString 今天不再适用于快速更新

仅适用于 Android TV 的 Android 清单 - 支持的设备太少?

websocket 是不是仅适用于浏览器