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();
}
}