package net.learn2develop.PopularAttractions;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;
public class PopularAttractions extends MapActivity {
private String[ ][ ] locations = {
{"Chinatown Heritage Center","1.2836,103.84425"},
{"Escape Theme Park","1.38104,103.936928"},
{"G-Max Reverse Bungy","1.2906,103.845322"},
{"Jurong BirdPark","1.32005,103.707153"},
{"NEWater Visitor Center","1.33105,103.955311"},
{"Red Dot Design Museum","1.277762,103.846225"},
{"Singapore Botanic Garden","1.31471,103.815689"},
{"Singapore Science Center","1.3249,103.740578"},
{"Singapore Zoological Garden","1.40502,103.793449"},
{"Snow City","1.32823,103.74263"},
{"Sungei Buloh Wetland Reserver","1.445144,103.729595"},
{"Super Ice World","1.300422,103.875348"},
};
Spinner spinnerView;
MapView mapView;
MapController mc;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinnerView = (Spinner) this.findViewById(R.id.spinner1);
mapView = (MapView) findViewById(R.id.mapview1);
mc = mapView.getController();
ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_dropdown_item);
for(int i = 0; i < locations.length; i++)
adapter.add(locations[i][0]);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerView.setAdapter(adapter);
spinnerView.setOnItemSelectedListener(selectListener);
gotoSelected();
}
private OnItemSelectedListener selectListener = new OnItemSelectedListener() {
public void onItemSelected(
AdapterView<?>parent, View v, int position, long id)
{
gotoSelected();
}
public void onNothingSelected(AdapterView<?> arg0) {}
};
public void gotoSelected()
{
int index = spinnerView.getSelectedItemPosition();
String[] coordinates = locations[index][1].split(",");
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
try {
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
Address ad = addresses.get(0);
String buff = new String();
for(int i = 0; i <= ad.getMaxAddressLineIndex(); i++ ) {
buff += ad.getAddressLine(i);
Toast.makeText(getBaseContext(), buff, Toast.LENGTH_SHORT).show();
GeoPoint location = new GeoPoint (
(int)(lat * 1E6),
(int)(lng * 1E6));
mc.animateTo(location);
mc.setZoom(16);
mapView.setStreetView(true);
}
for (Address a : addresses) {
Log.v("TAG", a.toString());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public boolean onKeyDown(int keyCode, KeyEvent event)
{
MapController mc = mapView.getController();
switch (keyCode)
{
case KeyEvent.KEYCODE_2:
mc.zoomIn();
break;
case KeyEvent.KEYCODE_1:
mc.zoomOut();
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
You could try Geocoder: https://developer.android.com/reference/android/location/Geocoder.html
Usually the first one in the list should be the one you are interested. For each Address you take the address with getAddressLine(int pos), normally you will get in position 0 the name of the street, in position 1 the zipcode + city and the next one the country. However, I haven’t made enough tests to be sure of this.
To get the address you could use something like this: