最近Androidでプログラミングを始めました。私のアプリでは、「ワシントン」や「ニューヨーク」など、ユーザーの場所を言葉で伝えたいと考えています。緯度と経度を取得できることを見てきましたが、場所を言葉 (おそらく文字列) で伝えたいと考えています。
私はそれを行うことができますか?できるとしたら、どうやって?
どのくらい正確ですか?都市の名前または州のみを教えてもらえますか?
ご協力ありがとうございました!
以下は、スレッドとハンドラーを使用して、UI をブロックせずにジオコーダーの回答を取得する完全なコード例です。
Geocoder 呼び出し手順は、Helper クラスに配置できます
public static String getAddressFromLocation(final Location location, final Context context, final Handler handler)
{
Thread thread = new Thread() {
@Override public void run()
{
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
try {
List<Address> list = geocoder.getFromLocation(
location.getLatitude(), location.getLongitude(), 1);
if (list != null && list.size() > 0)
{
Address address = list.get(0);
// sending back first address line and locality
result = address.getAddressLine(0) + ", " + address.getLocality()+","+address.getCountryName();
}
}
catch (IOException e)
{
Log.e(TAG, "Impossible to connect to Geocoder", e);
}
}
};
thread.start();
return result;
}
逆ジオコーダーを使用して実現できます。そのためのサンプルコード:
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(latValue,
longValue, 1);
if (addresses != null) {
Address returnedAddress = addresses.get(0);
StringBuilder strReturnedAddress = new StringBuilder(
"Address:\n");
for (int i = 0; i < returnedAddress.getMaxAddressLineIndex(); i++) {
strReturnedAddress
.append(returnedAddress.getAddressLine(i)).append(
"\n");
}
myAddress.setText(strReturnedAddress.toString());
} else {
myAddress.setText("No Address returned!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
myAddress.setText("Canont get Address!");
}
緯度と経度の値を取得した後に、このコードを配置するだけです。
これをチェックするだけで、必要なものがすべて手に入ります。
http://developer.android.com/training/basics/location/geocoding.html