DESENVOLVENDO PARA ANDROID: MEXENDO COM MAPAS

Opa, voltando a falar sobre Android, vamos falar de um negócio bacana, que é brincar com o GMap.

Mas para manipularmos mapas, teremos que ter uma Google API Key . Para consegui-la, entre no link. Nele, você deve colocar seu fingerprint, que pode ser conseguido através do comando:

keytool -list -alias meualias -keystore minhachave.jks

o google vai ti devolver uma tela aonde você terá um trecho de código que será usado na sua view de mapas.


<com.google.android.maps.MapView

     android:layout_width="fill_parent"

     android:layout_height="fill_parent"

     android:apiKey="0BN1gWBPEYDQluZey4KPKZH_C4AMH2sG02G1GLg"

     android:id="@+id/map_view"/>

Vamos ao momento feliz, mão na massa!!

O desafio será o seguinte: Me achar no mapa. Mostrando a minha localização pelo gps.

I) Temos que criar uma o mapa.xml dentro do res/layout, uma vez que recebemos o código do site do google que exibi acima.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"

          android:layout_height="fill_parent">

          <com.google.android.maps.MapView

               android:layout_width="fill_parent"

               android:layout_height="fill_parent"

               android:apiKey="0BN1gWBPEYDQluZey4KPKZH_C4AMH2sG02G1GLg"

               android:id="@+id/map_view"/>

</LinearLayout>

II) Como já foi visto , uma tela é uma Activity. Mas neste caso será um MapActivity pois queremos todas as funcionalidades que um mapa pode nos dar. Vamos criar uma classe Mapa.java que extenda MapActivity:


@Override

protected boolean isRouteDisplayed() {

     return false;

}

@Override

protected void onCreate(Bundle icicle) {

        super.onCreate(icicle);

        setContentView(R.layout.mapa);

        mapView = (MapView) findViewById(R.id.map_view);

        mapController = mapView.getController();

        //Pegamos os controles necessários do nosso sistema.

        mapView.setSatellite(true);

        mapView.setStreetView(true);

        mapView.displayZoomControls(true);

        mapController.setZoom(14);

        final List<Overlay> overlays = mapView.getOverlays();

        //Criamos um overlay, assim podemos nos achar no mapa e ainda mostrar o recurso de bússola(plus!).

        MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);

        overlays.add(myLocationOverlay);

        myLocationOverlay.enableCompass();

        myLocationOverlay.enableMyLocation();

        //E temos que atualizar o nosso sistema, quando tivermos em movimento. Para isso, criamos um listener, e //antes temos que inicializar o GPS para que possa escolher o melhor serviço de posicionamento disponível.

        LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();

        criteria.setAccuracy(Criteria.ACCURACY_COARSE);

        criteria.setAltitudeRequired(false);

        criteria.setCostAllowed(true);

        criteria.setPowerRequirement(Criteria.POWER_HIGH);

        String provider = locationManager.getBestProvider(criteria, true);

        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

        atualizarMeuLocal(location);

}

        LocationListener locationListener = new LocationListener() {

              public void onStatusChanged(String provider, int status, Bundle extras) {

              }

              public void onProviderEnabled(String provider) {

              }

              public void onProviderDisabled(String provider) {

                   atualizarMeuLocal(null);

              }

              public void onLocationChanged(Location location) {

                    atualizarMeuLocal(location);

               }

         };

              //Socilitamos que rode o listener a cada 2 segundos ou uma diferença de 20 metros.

               locationManager.requestLocationUpdates(provider, 2000, 20, locationListener );

   }

          //Agora temos que criar o nosso método atualizarMeuLocal(Location location), repare que ele o location que //usará para localizar o seviço e buscar a posição.

          private void atualizarMeuLocal(Location location) {

                if(location != null){

                     Double geoLat = location.getLatitude() * 1E6;

                     Double geoLong = location.getLongitude() * 1E6;

                     GeoPoint point = new GeoPoint(geoLat.intValue(), geoLong.intValue());

                     //Sempre que o o método for chamado, ele irá mover o nosso mapa para a posição atual.

                     mapController.animateTo(point);

                 }

            }

2 Responses to DESENVOLVENDO PARA ANDROID: MEXENDO COM MAPAS

  1. Wilton disse:

    Cara muito bom seu exemplo.

    Fui fazer aqui segui tudo certinho mas no meu Graphical Layout nao aparece o mapa

    diz assim “Failed to find style ‘mapViewStyle’ in current theme” ja fiz de tudo mudei o tema tudo certinho e nada .
    Será que vc tem um soloção.

    Desde ja agradeço.

    OBS: já tenho a apiKey.

  2. Leandro disse:

    NÃO ENTENDI ESSA PARTE…
    keytool -list -alias meualias -keystore minhachave.jks

    o que eu devo fazer ? oq é meu alias ? e que chave eu devo por ? nao entendi..

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: