31

アプリはGeocoderオブジェクトを使用します。在庫のフローズンヨーグルトNexusOneでは問題なく動作します。しかし、まったく同じアプリを別のデバイス(Advent Vega 10 "タブレットもFroyoを実行している)で実行すると、次の例外が発生します:サービスは利用できません。使用している方法はgetFromLocationName()、Android1.6Googleに対して構築しています。 API。

この例外がエミュレーターでスローされる問題を認識していますが、これは異なると思われます。フローズンヨーグルトを実行している1つのデバイスでスローされるのに、別のデバイスではスローされないのはなぜですか?

アプリは位置情報アプリであり、タブレットにはGPSまたはモバイルネットワークがないため、Wi-Fi接続で位置情報が提供されないシナリオでは、ユーザーが手動で位置情報を指定する必要があります。これにより、Geocoderオブジェクトを使用できなくなります。悪いニュースです。

ユーザーが地図上の場所を選択する方法を追加することもできますが、それは理想的ではありません。おそらくGoogleMapsAPIを直接使用することもできますが、より簡単な解決策があればいいので、最初に問題の性質を理解したいと思っています。

うまくいけば、将来のリリースでは、Androidに非ジオコーダーデバイス用のOSレベルの「デフォルトの場所」が含まれるため、場所認識アプリはGoogleTVなどのデバイスですぐに機能します。

4

6 に答える 6

27

GoogleのRetoMeierに私の理論が正しいことを確認するように依頼したところ、彼は「正しい。GeocoderはAOSPの一部ではないGoogleAPIアドオンの一部です」と述べました。

そのため、Playストア、GMailアプリなどが付属していないデバイスにも、Geocoderバックエンドがありません。

于 2011-01-21T19:12:52.957 に答える
13

この問題には別の回避策が考えられますが、残念ながら重複する質問としてマークされているため、見逃される可能性があります。基本的に、デバイスを再起動すると問題が解決します。私はそれを「解決策」ではなく「回避策」と呼んでいることに注意してください。:(

于 2013-04-16T16:10:23.060 に答える
2

代替案を探している人にとって、うまくいけば、別の投稿での私の答えが役立つでしょう。ジオコーディングでエラーが検出された場合は、GoogleGeocodingAPIを使用できます。

詳細コード=> jsonを使用して現在地を取得

于 2013-11-27T15:55:40.737 に答える
1

一部のデバイスはジオコーダーをサポートしていないため、独自のジオコーダーを作成する必要があります。

基本的に、アドレスのgoogleを要求し、json応答を処理するには、非同期タスクを作成する必要があります。

aqueryを使用して、私は次のようなことをします:

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

数時間を無駄にした後、私は最も簡単な解決策を得ました。

デバイスを再起動したところ、動作し始めました。

この問題は、OSレベルのキャッシュの問題が原因のようです。それがあなたのためにも働くことを願っています。

于 2018-03-17T19:04:39.070 に答える
0

私も同じ問題を抱えていました。次の関数を使用しました。

ノート:

アクティビティを使用し、次の機能にcontextは使用しないでください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 に答える