Qui c'è l'attività principale:
codice:
ackage mieapplicazioni.menudemo;
import java.util.List;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.MyLocationOverlay;
import com.google.android.maps.Overlay;
//import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
public class MenuDemo extends MapActivity implements LocationListener{
/* E' buon uso avere della variabili per specificare l'id degli elemti del menù*/
private static final int MENUITEM_COMANDO_1 = 1;
private static final int MENUITEM_COMANDO_2 = 2;
private static final int MENUITEM_COMANDO_3 = 3;
private MyLocationOverlay myLocationOverlay;
private LocationManager locationManager;
private MapController mapController;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* aggiungo lo zoom recuperando la risorsa google maps e
* settandolo con un metodo apposito */
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
//Inizio parte del GPS
//Recupero le risorse MapView, LinerLayout, i TextView, MapController e lo Zoom
//....
/* Aggiunge l'overlay sulla mappa della propria posizione:
* L'oggetto MyLocationOverlay() si occupa di rappresentare la posizione corrente
* dell'utente e grazie all'ausilio della classe Overlay si riesce a raffigurare
* la propria posizione sulla mappa */
myLocationOverlay = new MyLocationOverlay(this, mapView);
List<Overlay> overlays = mapView.getOverlays();
overlays.add(myLocationOverlay);
myLocationOverlay.enableMyLocation();
/* Setta il LocationManager:
* La classe LocationManager fornisce l'accesso al sistema di localizzazione,
* fornendo aggiornamenti periodici del dispositivo di GPS. getSystemService()
* ritorna il gestore del sistema richiesto, nel nostro caso è appunto il GPS.*/
locationManager = (LocationManager) getSystemService (Context.LOCATION_SERVICE);
}
@Override
public void onStart() {
super.onStart();
// Aggiorna l'interfaccia
Location location = locationManager.getLastKnownLocation(Context.LOCATION_SERVICE);
updateWithNewLocation(location);
// Avvia il Listener per gli aggiornamenti della posizione
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
0, // 0sec
0, // 0m
this);
//Verifica se il GPS è abilitato altrimenti avvisa l'utente
if(!locationManager.isProviderEnabled("gps")){
Toast.makeText(this, "Il GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
}
}
@Override
public void onStop() {
// Stoppa il Listener delle posizioni
locationManager.removeUpdates(this);
super.onStop();
}
@Override
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
@Override
public void onProviderDisabled(String provider) {
updateWithNewLocation(null);
}
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
/* updateWithNewLocation: Questo metodo non fa altro che aggiornare la posizione
* sulla mappa e settare le informazioni di latitudine, longitudine, altitudine
* e velocità */
private void updateWithNewLocation(Location location) {
// Aggiorna la posizione della mappa e l'overlay
if (location != null) {
// Aggiorna il marker della mappa
MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.invalidate();
// Aggiorna la location
Double geoLat = location.getLatitude()*1E6;
Double geoLng = location.getLongitude()*1E6;
GeoPoint point = new GeoPoint(geoLat.intValue(), geoLng.intValue());
mapController.animateTo(point);
//Setta le info sulle TexView
TextView lat = (TextView) findViewById(R.id.TextView01);
lat.setText("Latitude: "+normalize(location.getLatitude()));
TextView log = (TextView) findViewById(R.id.TextView02);
log.setText("Longitude: "+normalize(location.getLongitude()));
TextView alt = (TextView) findViewById(R.id.TextView03);
alt.setText("Altitude: "+Math.floor(location.getAltitude())+" m");
TextView speed = (TextView) findViewById(R.id.TextView04);
speed.setText("Speed: "+Math.floor((location.getSpeed()*3.6))+" km/h");
}
}
//Riduce a 6 il numero di cifre decimali dopo la virgola
private String normalize(Double x){
x *= 1000000;
x = Math.floor(x);
x /= 1000000;
return x.toString();
}
/* Con questo metodo creo il menù, l'argomento Menu agginunge degli elementi
* e ogni elemento MenuItem setta la sua icona*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem comando1 = menu.add(Menu.NONE, MENUITEM_COMANDO_1, 1, "Set Range");
comando1.setIcon(R.drawable.icon);
MenuItem comando2 = menu.add(Menu.NONE, MENUITEM_COMANDO_2, 2, "Comando 2");
comando2.setIcon(R.drawable.icon);
MenuItem comando3 = menu.add(Menu.NONE, MENUITEM_COMANDO_3, 3, "Comando 3");
comando3.setIcon(R.drawable.icon);
return true;
}
/* Questo metodo gestisce gli eventi di ogni singolo tasto del menù recuperando
* il suo id e tramite uno switch descrivendo per ogni caso un'azione*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case MENUITEM_COMANDO_1:
//Toast.makeText(this, "Comando 1", Toast.LENGTH_SHORT).show();
startSubActivity();
return true;
case MENUITEM_COMANDO_2:
Toast.makeText(this, "Comando 2", Toast.LENGTH_SHORT).show();
return true;
case MENUITEM_COMANDO_3:
Toast.makeText(this, "Comando 3", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
/* Con l'oggetto Intent dico quale attività dovrà essere lanciata, con
* startActivity quell'attività si avvierà occupando effettivamente lo schermo*/
private void startSubActivity() {
Intent intent = new Intent(this, SubActivity.class);
startActivity(intent);
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
}
Il manifest.xml
codice:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="mieapplicazioni.menudemo"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!-- per google maps -->
<uses-library android:name="com.google.android.maps" />
<activity android:name=".MenuDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".SubActivity" android:label="@string/sub_activity" />
</application>
<!-- per google maps e per il GPS -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" />
</manifest>