Autore Topic: Sensore orientamento  (Letto 1891 volte)

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Sensore orientamento
« il: 01 Febbraio 2011, 10:03:58 CET »
0
Ciao a tutti,
sto sviluppando una app che orienti una freccia dalla mia posizione attuale alla posizione che devo raggiungere, il tutto considerando il nord.  In pratica i riferimenti alle posizioni ce li ho tutti mi manca l'angolo di azimuth che devo prendere dal sensore di orientamento, l'unico problema è che non so dove dichiararlo visto che dovrei metterlo dove aggiorna lo stato del gps ma li mi dà errore..potete darmi una mano? Questo è il codice...
Codice (Java): [Seleziona]
public class NavigaActivity extends Activity {
//      OrientationEventListener sens;
        // Otteniamo il riferimento alla classe compass
        public Compass compass;
        // Otteniamo i riferimenti alle coordinate della posizione da raggiungere
        public double lon;
        public double lat;
        // Distanza fra la mia posizione e quella da raggiungere
        public double distance;
        // Riferimento all'angolo di azimuth
        public double azimuth;
        // Otteniamo i riferimenti alla mia posizione attuale
        double geoLat;
        double geoLon;
        // Otteniamo i riferimenti alla Text View del mio layout
        private TextView latitudinePos;
    private TextView longitudinePos;
    private TextView distanza;
        // Otteniamo il riferimento al LocationManager
    LocationManager locationManager;    
    /** Called when the activity is first created. */
    @Override  
    public void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.naviga);
        compass=(Compass)findViewById(R.id.compass);            
        Intent intent=getIntent();
        String pack=getPackageName();
        // Richiamiamo i valori di lat e long della posizione da raggiungere
        lat=intent.getDoubleExtra(pack+"lat",-1);
        lon=intent.getDoubleExtra(pack+"lon",-1);
        // Assegnamo i valori alle text view
        latitudinePos=(TextView)this.findViewById(R.id.tvLatitudine);
        longitudinePos=(TextView)this.findViewById(R.id.tvLongitudine);
        distanza=(TextView)this.findViewById(R.id.tvDistanza);
        // Settiamo il contenuto testuale delle text view
        distanza.setText(Double.toString(distance)+ " Km ");
        latitudinePos.setText(Double.toString(lat));
        longitudinePos.setText(Double.toString(lon));
                // Il LocationManager è uno strumento con cui è possibile ricevere notifiche sulla
        // posizione del dispositivo. Otteniamo il riferimento al Location Manager        
        locationManager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);          
        // Verifichiamo se il GPS è abilitato altrimenti avvisiamo l'utente
        if(!locationManager.isProviderEnabled("gps")){
                Toast.makeText(this, "GPS è attualmente disabilitato. E' possibile abilitarlo dal menu impostazioni.", Toast.LENGTH_LONG).show();
        }        
        // Registriamo il locationListener al provider GPS
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
       
    }    
    // Per ricevere la notifica delle variazioni di posizione è necessario creare l'implementazione
    // dell'interfaccia LocationListener e registrarsi a esso come ascoltatori.
    // Registriamo il LocationListener al provider GPS              
    LocationListener locationListener = new LocationListener() {
   
        // Invochiamo il seguente metodo in corrispondenza di una variazione della posizione
        // Le informazioni sono incapsulate in un oggetto di tipo Location
        public void onLocationChanged(Location location){
                // Aggiorna la location
                geoLat = location.getLatitude();
                geoLon = location.getLongitude();                              
                // Otteniamo l'angolo fra la mia posizione attuale e quella da raggiungere
                double gradi=compass.gradiPos(geoLat, geoLon, lat, lon);
                // Calcoliamo di quanto dobbiamo ruotare la bussola in base a gradi ed azimuth
                compass.ruotaBussola(gradi, azimuth);
                System.out.println("att" + geoLat + "" + geoLon + "gps" + lat + "" + lon );
        }        
        // Messaggio temporaneo che notifica abilitazione provider GPS
        public void onProviderEnabled(String provider) {
                Toast.makeText(NavigaActivity.this,"onProviderEnabled "+provider, Toast.LENGTH_SHORT).show();
        }
        // Messaggio temporaneo che notifica disabilitazione provider GPS
        public void onProviderDisabled(String provider) {
                Toast.makeText(NavigaActivity.this,"onProviderDisabled "+provider, Toast.LENGTH_SHORT).show();
        }        
        // Notifica sulle variazioni di stato del servizio
        public void onStatusChanged(String provider, int status,Bundle extras) {
                Toast.makeText(NavigaActivity.this,"onStatusChanged "+provider+" status: "+status, Toast.LENGTH_SHORT).show();
        }      
    };

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Sensore orientamento
« Risposta #1 il: 01 Febbraio 2011, 10:15:32 CET »
0

Offline brastolfo

  • Utente junior
  • **
  • Post: 77
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Htc Nexus One
  • Sistema operativo:
    Vista
Re:Sensore orientamento
« Risposta #2 il: 01 Febbraio 2011, 10:22:06 CET »
0
Prima di postare...
Purtroppo non ho trovato niente che potesse aiutarmi...a cosa ti riferisci?