31

该应用程序使用Geocoder对象。它在我的股票 Froyo Nexus One 上运行良好。但后来我在不同的设备上运行完全相同的应用程序(Advent Vega 10" 平板电脑也运行 Froyo),我得到这个异常:服务不可用。我使用的方法是getFromLocationName(),我正在针对 Android 1.6 Google 构建API。

我知道在模拟器上引发此异常的问题,但我怀疑这是不同的。为什么它会被扔在一台运行 Froyo 的设备上而不是另一台设备上?

该应用是定位应用,由于平板没有GPS或移动网络,在Wi-Fi连接不提供位置的场景下,用户必须手动指定,因此无法使用Geocoder对象是个坏消息。

我可以为用户添加一种在地图上选择位置的方法,但这并不理想。可能我可以直接使用 Google Maps API,但我很想先了解问题的性质,因为有一个更简单的解决方案会很好。

希望在未来的版本中,Android 将为非地理编码器设备提供操作系统级别的“默认位置”,因此位置感知应用程序可以在 Google TV 等设备上开箱即用。

4

6 回答 6

27

我请 Google 的 Reto Meier 确认我的理论是正确的,他说“正确。Geocoder 是 Google API 插件的一部分,不是 AOSP 的一部分。”

因此,任何不附带 Play 商店、GMail 应用程序等的设备也将缺少 Geocoder 后端。

于 2011-01-21T19:12:52.957 回答
13

这个问题似乎还有另一种可能的解决方法,不幸的是,它被标记为重复问题,因此可能会被遗漏。从本质上讲,重新启动设备可以解决问题。请注意,我将其称为“解决方法”而不是“解决方案”。:(

于 2013-04-16T16:10:23.060 回答
2

对于那些寻找替代方案的人,希望我在另一篇文章中的回答很有用。在地理编码中发现错误时,您可以使用Google Geocoding API 。

更多代码 =>使用 json 获取当前位置

于 2013-11-27T15:55:40.737 回答
1

有些设备不支持地理编码器,因此您需要做的是创建自己的地理编码器。

基本上,您需要创建一个异步任务来向 google 请求地址并处理 json 响应。

使用查询,我做这样的事情:

public void asyncJson(String address){
        address = address.replace(" ", "+");

        String url = "http://maps.googleapis.com/maps/api/geocode/json?address="+ address +"&sensor=true";

        aq.ajax(url, JSONObject.class, new AjaxCallback<JSONObject>() {

                @Override
                public void callback(String url, JSONObject json, AjaxStatus status) {                        

                        if(json != null){

                                 //here you work with the response json
                                 JSONArray results = json.getJSONArray("results");                               
                                Toast.makeText(context, results.getJSONObject(1).getString("formatted_address"));

                        }else{                                
                                //ajax error, show error code
                                Toast.makeText(aq.getContext(), "Error:" + status.getCode(), Toast.LENGTH_LONG).show();
                        }
                }
        });        
}
于 2013-11-27T15:36:07.377 回答
1

浪费了几个小时后,我得到了一个最简单的解决方案。

我刚刚重新启动了我的设备,它开始工作了。

看来,问题是由于某些操作系统级别的缓存问题。希望它也适用于您的..

于 2018-03-17T19:04:39.070 回答
0

我遇到过同样的问题。我使用了以下功能。

笔记:

使用context你的Activity,不要使用getApplicationContext()以下功能

public static Address getLocalityFrmGeoCoder(Context context, Location mLocation) {
        try {
            if(mLocation!=null){
            Geocoder gCoder = new Geocoder(context, Locale.getDefault());
            List<Address> address = gCoder.getFromLocation(mLocation.getLatitude(), mLocation.getLongitude(), 1);
            if (address.size() > 0) {
                return address.get(0);
            }
            }

        } catch (Exception e) {
            Log.d("GEOCODER", "GEOCODER EXCEPTION");
            e.printStackTrace();

        }
    return null;
}
于 2017-03-01T10:59:05.387 回答