android geocoder api 10服务不可用

san*_*art 1 java android google-maps

Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.ENGLISH);
try {
    List<Address> addresses =  geocoder.getFromLocation(lat,lon, 1); <--Exception
Run Code Online (Sandbox Code Playgroud)

此代码导致异常服务不可用.谁能帮我?我已经读过它是A 2.2的一个bug,api 10是A 2.3.3所以从理论上说它应该可行.

Ton*_*han 5

回答:

首先,如果您使用的是模拟器,请尝试将AVD设备的"目标"设置为"Google API"之一,而不是基本的"Android"sdk.因此,如果您想要定位2.3.3,请使用"Google API(Google Inc.) - API Level 10"而不是 "Android 2.3.3 - API Level 10".

背景信息

该谷歌的API插件包括后端服务实现(搜索"地理编码器后端")所需要Geocoder.getFromLocation...工作方法.

Geocoder类需要一个未包含在核心android框架中的后端服务

这就是为什么您的AVD必须以Google API为目标才能使这些方法有效.如果这不起作用,请尝试在真实设备上进行测试.除了可能的错误之外,获得此异常的原因是互联网出现问题/缺少连接,或者更可能是该设备上没有后端服务.

据推测,大多数包含Google服务和地图等应用的设备都会实现后端.我不知道这是多么准确.

还有一种从API9开始的方法,Geocoder.isPresent()如果存在后端实现,则返回true.然而,我发现这是不可靠的,因为在亚马逊Kindle Fire上测试它返回true,但是在getFromLocationName()打电话时我仍然有一个IOException: Service Not Available

确定后端是否存在似乎是最可靠的方法,只是进行getFromLocation...调用并查看您的addresses字段null是否List为空或者是否为空.null如果根本找不到匹配项,这些方法也可能返回一个或空列表,这有点含糊不清.