Hacer un buscador de mapas para Android.
Ten en cuenta que necesitarás una API key de Google Maps para desarrollo, y que siempre es recomendable tenerla guardada en un archivo strings.xml por ejemplo, y no en la misma actividad. La clase Geocoder es la que se encarga de convertir la cadena de texto con la direción al formato de coordenadas para el Mapview.
Yo sólo soy un principiante con estos temas, aunque mi ejemplo funciona tengo que recomendar la serie de articulos A simple example using Google Maps Android API v2de Android-er, él sabe mucho más que yo del tema en general y tiene mucha más información sobre el uso de Mapas en Android.
Primero, el layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:maxLines="1" />
<Button
android:id="@+id/button1"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Buscar" />
</LinearLayout>
<com.google.android.maps.MapView
android:id="@+id/mapa"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:apiKey="000000000000000000000000000000000000000"
android:clickable="true" />
</LinearLayout>
Ahora el código Java
package ejercicio.ejercicio;
import java.io.IOException;
import java.util.List;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
public class Main extends MapActivity {
private MapView mapa;
private MapController controlMapa;
private Button boton;
private EditText input;
private String direccion;
private List <Address> address;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapa = (MapView)findViewById(R.id.mapa);
controlMapa = mapa.getController();
input = (EditText)findViewById(R.id.editText1);
boton = (Button)findViewById(R.id.button1);
mapa.setBuiltInZoomControls(true);
boton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
direccion = input.getText().toString();
if(direccion.equals("")){
toast("No hay dirección para buscar : (");
}else{
toast("Buscando \""+direccion+"\"");
Geocoder coder = new Geocoder(getApplicationContext());
try {
address = coder.getFromLocationName(direccion, 1);
Address location = address.get(0);
int lat = (int) (location.getLatitude()*1E6);
int lon = (int) (location.getLongitude()*1E6);
GeoPoint loc = new GeoPoint(lat,lon);
controlMapa.setCenter(loc);
controlMapa.setZoom(14);
} catch (IOException e) {
toast("No se ha encontrado la dirección : (");
}
}
// Ocultar el teclado
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
}
});
}
@Override
protected boolean isRouteDisplayed(){
return false;
}
public void toast(String mensaje){
Toast.makeText(getApplicationContext(), mensaje, 1000).show();
}
}