Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Geocoder是否仅适用于互联网连接?_Android_Google Geocoder_Android Maps V2 - Fatal编程技术网

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

Android Geocoder是否仅适用于互联网连接?,android,google-geocoder,android-maps-v2,Android,Google Geocoder,Android Maps V2,我正试图通过onMapLongClickListener(LatLng点)在谷歌地图上获取点击地址,使用点的lat和lng,并使用地理编码器将它们转换为地址。如果我连接到互联网,效果很好,但如果我不是,则应用程序会崩溃,因为getFromLocation方法会给出空结果。 所以我假设Geocoder类只在连接被启用的情况下工作。是这样吗?有没有办法让地址保持脱机状态 这就是方法的代码: public void onMapLongClick(LatLng point) {

我正试图通过onMapLongClickListener(LatLng点)在谷歌地图上获取点击地址,使用点的lat和lng,并使用地理编码器将它们转换为地址。如果我连接到互联网,效果很好,但如果我不是,则应用程序会崩溃,因为getFromLocation方法会给出空结果。 所以我假设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);
        }    
public void onMapLongClick(LatLng点){
列表地址=空;
试一试{
addresses=geocoder.getFromLocation(点.纬度,点.经度,1);
}捕获(IOE异常){
e、 printStackTrace();
}
字符串地址=地址.get(0).getAddressLine(0);
字符串city=addresses.get(0).getAddressLine(1);
字符串country=addresses.get(0).getAddressLine(2);
字符串str=地址+”,“+城市+”,“+国家;
gMap.addMarker(新的MarkerOptions()
.位置(点)
.标题(“点击点”)
.draggable(错误)
.snippet(地址+”、“+城市+”、“+国家”);
可控震源v=(可控震源)getSystemService(Context.可控震源_服务);
v、 振动(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" />


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

我肯定某个地方有人提供离线地理编码数据库,但有人不是谷歌,他们的产品可能不是免费的。谷歌的地理编码API是免费的,有条件的(请参阅)。地理编码员需要映射世界上的所有地址(或者至少是应用程序使用的地区)到经纬度坐标。这是大量的数据。然而,像TomTom、Navigon等地理编码提供商通过将离线地理编码数据捆绑到他们的Android应用程序中,并将其安装到您的Android设备上,实现了这一点。我看不出离线地理编码数据有什么问题。通过互联网连接使用反向地理编码只适用于那些有大数据计划的人。那些使用有限数据计划的人最好选择离线数据选项。首先,它占据了很大的空间,任何真正的准确度-我们谈论的是演出。您在这些应用程序中拥有有限的子集。其次,准确性-下载的版本不是最新的。第三,他询问了一位特定的地理编码器。那个没有离线模式。如果你想提供一个,你必须使用另一个服务,而不是谷歌的。