Tecnologie

Dettaglio dell'articolo:

domenica 08 novembre 2009

GPS e Mappe di Google in Android

Creazione del progetto

Utilizzando Eclipse, creare un nuovo progetto Android e chiamarlo MAPGPS.java.

Per porter utilizzare le funzionalità GPS nella tua appllicazione per Android, devi aggiungere le permission ACCESS_FINE_LOCATION nel file AndroidManifest.xml, per la navigazione con le mappe di google devi aggiungere le permission android.permission.INTERNET e  la direttiva uses-library per l'utilizzo delle librerie per google maps:

=======================================================

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.tests"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <uses-library android:name="com.google.android.maps" />  
    
        <activity android:name=".MAPGPS"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-sdk android:minSdkVersion="3" />
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission
        android:name="android.permission.INTERNET" />

</manifest>

=======================================================

Per porter visualizzare le mappe di google all'interno della propria applcazione, in main.xml, sostituire l'elemento TextView  con l'elemento  MapView:

=======================================================

<?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"
    >
<com.google.android.maps.MapView
    android:id="@+id/mapview1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:enabled="true"
    android:clickable="true"
    android:apiKey="INSERT_KEY_HERE" />
</LinearLayout>


=======================================================

Per poter utilizzare le api di Google Maps, è necessaria una chiave, che va inserita al posto della stringa evidenziata in grassetto.

Generazione della chiave per google maps api

Per la richiesta di Maps API Key, è necessario fornire un'impronta digitale MD5 del certificato che verrà utilizzato per firmare l'applicazione. Prima di visitare la pagina di registrazione (http://code.google. com/android/maps-api-signup.html), utilizzare keytool per generare l'impronta digitale del certificato appropriato.

$ keytool -list -alias androiddebugkey \
-keystore .keystore \
-storepass android -keypass android

Per default, il debug keystore si trova nella directory di lavoro dell'eclipse sdk. Essa varia in ogni piattaforma:

  • Windows Vista: C:\Users\\.android\debug.keystore

  • Windows XP: C:\Documents and Settings\\.android\debug.keystore

  • OS X and Linux: ~/.android/debug.keystore

Creazione del programma java

Riportiamo il listato del programma  MAPGPS.java, per mezzo del quale, quando cambia la posizione geografica per mezzo di una variazione segnalata dal dispositivo GPS, la latitudine e la longitudine viene inviata alle Mappe di Google, che quindi visualizzano la mappa della posizione corrente.

 

=======================================================

package com.android.tests;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
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 MAPGPS extends MapActivity {
    
    private LocationManager lm;
    private LocationListener locationListener;

    private MapView mapView;
    private MapController mc;

    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //---use the LocationManager class to obtain GPS locations---
        lm = (LocationManager)
            getSystemService(Context.LOCATION_SERVICE);    
        
        locationListener = new MyLocationListener();
        
        lm.requestLocationUpdates(
            LocationManager.GPS_PROVIDER,
            2000, 10,
            locationListener);
        
        mapView = (MapView) findViewById(R.id.mapview1);
        mc = mapView.getController();

    }
    
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }    
    
    private class MyLocationListener implements LocationListener
    {
        @Override
        public void onLocationChanged(Location loc) {
            if (loc != null) {
                Toast.makeText(getBaseContext(),
                    "Location changed : Lat: " + loc.getLatitude() +
                    " Lng: " + loc.getLongitude(),
                    Toast.LENGTH_SHORT).show();
                
                GeoPoint p = new GeoPoint(
                        (int) (loc.getLatitude() * 1E6),
                        (int) (loc.getLongitude() * 1E6));

                mc.animateTo(p);
                mc.setZoom(16);                
                mapView.invalidate();

            }
        }

        @Override
        public void onProviderDisabled(String provider) {
        }

        @Override
        public void onProviderEnabled(String provider) {
        }

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

=======================================================

Simulazione del GPS per mezzo dell'emulatore Android


Per porter simulare eventi GPS utilizzando l'emulatore Android, è sufficiente fare telnet all'emulatore ed usare il comando geo per inviare le coordinate GPS:


C:\>telnet localhost 5554
Android Console: type 'help' for a list of commands
OK
geo fix 9.191190 45.464004
OK

Di seguito riportiamo l'immagine della mappa che si deve ottenere all'interno dell'applicazione.

Android Vertual Device

 


Commenti:

Ciao, ho provato a far girare questo esempio ma non funziona e girando altrove (su Google) ho visto che fa "mapView = new MapView(this, "chiave_google_maps"); l'applicazione parte ma non carica le mappe Grazie per eventuali risposte

Inviato da: mikelmanto il: 2011-04-21 17:05:19.847607

Scrivi un commento:

Archivio