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.


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