4

Geocoder の存在をテストする簡単なアクティビティを作成しました。Geocoder.isPresent() を呼び出すと、常に false が返されます。

クラス:

public class LocationTestActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        LocationManager locationManager = (LocationManager)  this.getSystemService(Context.LOCATION_SERVICE);
        Log.d( "LocationTestActivity", "Geocoder.isPresent : " + Geocoder.isPresent() );

    }
}


AndroidManifest.xml には、「application」要素の前に次のエントリもあります。

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>


環境: Eclipse Indigo 3.7.1、XP Professional 2002 SP 3 上の ICS 4.0 エミュレーター

理解してください:
1. Geocoder.isPresent() が常に false を返すのはなぜですか?
2. Geocoder.isPresent() が true を返すようにするには、どのような変更を加える必要がありますか?

よろしくお願いします!

4

3 に答える 3

5

実際にはGeocoder、フレームワークによってバックグラウンドで実行されるサービスが必要です。

ドキュメントから:

プラットフォームにバックエンド サービスがない場合、Geocoder クエリ メソッドは空のリストを返します。isPresent() メソッドを使用して、Geocoder の実装が存在するかどうかを判断します。

のドキュメントを見るとisPresent()、それは述べています。

Geocoder メソッド getFromLocation および getFromLocationName が実装されている場合は true を返します。ネットワーク接続の欠如により、これらのメソッドが null または空のリストを返すことがあります。

注:isPresent() Pre-Api 9 プラットフォームフォームでは使用できないことに注意してください。

于 2012-01-31T06:49:53.053 に答える
2

を使用AsyncTaskしてサーバーから座標を取得するために使用しますgeocoder。たとえば、getFromLocationName()を使用して呼び出す必要がありますAsyncTask。UI スレッド (メイン アクティビティ) は、時間がかかりすぎるタスクを許可しないため、メソッドは空のリストを返します。

于 2016-06-18T12:25:28.620 に答える
1

このコードをエミュレータまたはデバイスでテストしますか? 2.2 エミュレーターで GeoCoder を使用していたときに、同じ問題に直面しました。ただし、コードは 2.1 エミュレーターで正常に動作します。2.1を使用してみてください

また、コードはデバイス上で正常に実行されている必要があります。

于 2012-01-31T06:43:55.740 に答える