Autore Topic: Salvare coordinate attuali in una variabile, come?  (Letto 2316 volte)

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Salvare coordinate attuali in una variabile, come?
« il: 18 Agosto 2010, 16:24:12 CEST »
0
Ciao, sto sviluppando i miei mini programmini per il mio androide per prendere confidenza con l'SDK. Per ora ho sviluppato un'applicazione che propone una scelta con dei radio button e stampa la scelta prendo un bottone. Fin qui non ho problemi, ora vorrei aggiungere che premendo il bottone oltre alla scelta vengano mostrate le mie coordinate attuali.
Ho fatto così:
Codice (Java): [Seleziona]
package it.prova.provafunzioni;


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.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;


public class TestGPS extends Activity implements Button.OnClickListener{

       
         //radio scelte possibili
         private RadioButton rist;
         private RadioButton pizza;
         private RadioButton hotel;
               
         //bottone procedi
         private Button b1;
         //area testo in cui vengono stampati i dati
         private TextView t1;
         
         //coordinate
         Double lat=10.0;
         Double lon=40.0;
       
         
         @Override
         public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
         
         
         rist=(RadioButton)findViewById(R.id.radio_rist);
         pizza=(RadioButton)findViewById(R.id.radio_pizza);
         hotel=(RadioButton)findViewById(R.id.radio_hotel);
         b1=(Button)findViewById(R.id.procedi);
         b1.setOnClickListener(this);
         t1=(TextView)findViewById(R.id.hopremuto);
         
         //aggiunta fatta per ottenere le coordinate
         LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
         LocationListener mlocListener = new MyLocationListener();
         mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
         //fine aggiunta
         
         }
         
         
         //aggiunta per ottenere coordinate
         public class MyLocationListener implements LocationListener

         {

                @Override

                public void onLocationChanged(Location loc)

                {
                        loc.getLatitude();
                        loc.getLongitude();
                       
                        lat=loc.getLatitude();
                        lon=loc.getLongitude();
                }


                @Override

                public void onProviderDisabled(String provider)

                {
                 Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();

                }


                @Override

                public void onProviderEnabled(String provider)

                {
                Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
                }


                @Override

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

                {
                }

         }/* End of Class MyLocationListener */
         //fine aggiunta

         @Override
         public void onClick(View v) {
                 
                String att="";
                int km=0;
                 if(v == b1)
         {
         //scelte possibili
                 
         if(rist.isChecked() == true)
         {
                 //t1.setText("Selected is : "+rist.getText());
                 att="ristorante";
         }
         else if(pizza.isChecked() == true){
                 //t1.setText("Selected is : "+pizza.getText());
                 att="pizzeria";
         }
         
         else if(hotel.isChecked() == true){
                 //t1.setText("Selected is : "+hotel.getText());
                 att="hotel";
         }
                 
       
         t1.setText("Selected is : "+att+",  "+"\n Lat: "+lat+"; Lon: "+lon);
         
         }
         }
}
l'applicazione parte regolarmente, dal ddms non vedo errori, pero premendo il bottone per vedere quale scelta è stata fatta ottengo come coordinate sempre 10.0,40.0 (anche se tramite telnet le modifico!)
avete indicazioni da darmi? Considerate che sono alle primissime armi con android!
grazie!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #1 il: 18 Agosto 2010, 16:53:45 CEST »
0
Se non ti sposti, il listener non viene svegliato, per cui non vengono aggiornate le posizioni.
Potresti fare una chiamata a vuoto per prendere le informazioni relative a lat e long, inizializzando così i valori alla tua posizione corrente.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #2 il: 18 Agosto 2010, 16:56:23 CEST »
0
grazie per la risposta!
Se non ti sposti, il listener non viene svegliato, per cui non vengono aggiornate le posizioni.
Potresti fare una chiamata a vuoto per prendere le informazioni relative a lat e long, inizializzando così i valori alla tua posizione corrente.
ho provato a spostarmi, inserendo con telnet diverse coordinate per più volte, ma non ha avuto esito.

In che senso fare una chiamata a vuoto? (considera che ho competenze di base per java e quasi nulle di android!)

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #3 il: 18 Agosto 2010, 17:19:51 CEST »
0
prova a loggare se entra nel metodo onLocationChanged.
Io ho avuto problemi con il gps nell'emulatore.

per il resto, scusami, ma non avevo letto bene il codice.
Dovrebbe essere tutto ok, per cui mi limiterei a controllare il funzionamento del gps con l'emulatore.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #4 il: 18 Agosto 2010, 17:24:37 CEST »
0
08-18 15:19:41.145: DEBUG/LocationManager(3742): Constructor: service = android.location.ILocationManager$Stub$Proxy@43779930
08-18 15:19:41.154: WARN/GpsLocationProvider(65): Duplicate add listener for uid 10022
08-18 15:19:41.154: DEBUG/GpsLocationProvider(65): setMinTime 0
08-18 15:19:41.154: DEBUG/GpsLocationProvider(65): startNavigating

ecco cosa mi dice il ddms per quanto riguarda il locationmanager, ma non riesco a cavarci nulla di utile!

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #5 il: 18 Agosto 2010, 20:09:11 CEST »
0
Ciao AndFan, potresti controllare in Eclipse se su Windows -> Preferences -> Java -> Compiler -> Compiler compliance level hai impostato 1.6?

Rimuovendo un po' di Override (che a me non fanno nemmeno compilare il tuo codice) sembra funzionare tutto correttamente:

Codice (Java): [Seleziona]
public class TestGPS extends Activity implements Button.OnClickListener{
        //radio scelte possibili
        private RadioButton rist;
        private RadioButton pizza;
        private RadioButton hotel;

        //bottone procedi
        private Button b1;
        //area testo in cui vengono stampati i dati
        private TextView t1;

        //coordinate
        Double lat=10.0;
        Double lon=40.0;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);


                rist=(RadioButton)findViewById(R.id.radio_rist);
                pizza=(RadioButton)findViewById(R.id.radio_pizza);
                hotel=(RadioButton)findViewById(R.id.radio_hotel);
                b1=(Button)findViewById(R.id.procedi);
                b1.setOnClickListener(this);
                t1=(TextView)findViewById(R.id.hopremuto);

                //aggiunta fatta per ottenere le coordinate
                LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                LocationListener mlocListener = new MyLocationListener();
                mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
                //fine aggiunta
        }


        //aggiunta per ottenere coordinate
        public class MyLocationListener implements LocationListener
        {
                public void onLocationChanged(Location loc)
                {
                        loc.getLatitude();
                        loc.getLongitude();

                        lat=loc.getLatitude();
                        lon=loc.getLongitude();
                }

                public void onProviderDisabled(String provider)
                {
                        Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
                }


                public void onProviderEnabled(String provider)
                {
                        Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
                }


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

        }/* End of Class MyLocationListener */
        //fine aggiunta

        public void onClick(View v) {
                String att="";
                //int km=0;
                if(v == b1)
                {
                        //scelte possibili

                        if(rist.isChecked() == true)
                        {
                                //t1.setText("Selected is : "+rist.getText());
                                att="ristorante";
                        }
                        else if(pizza.isChecked() == true){
                                //t1.setText("Selected is : "+pizza.getText());
                                att="pizzeria";
                        }

                        else if(hotel.isChecked() == true){
                                //t1.setText("Selected is : "+hotel.getText());
                                att="hotel";
                        }

                        t1.setText("Selected is : "+att+",  "+"\n Lat: "+lat+"; Lon: "+lon);
                }
        }
}
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline AndFan

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Tattoo
Re:Salvare coordinate attuali in una variabile, come?
« Risposta #6 il: 19 Agosto 2010, 13:22:27 CEST »
0
il level compliance è impostato correttamente su 1.6.

Provando le tue modifiche (e senza cambiare nessun'altra impostazione) ora vedo che le variabili passano dal valore impostato quando le dichiaro a 0.0


edit: FUNZIONA!
prima avevo provato a cambiare le coordinate tramite ddms, ora invece usando telnet ottengo il risultato corretto!

quindi DDMs usato per impostare i parametri del telefono non funziona?
« Ultima modifica: 19 Agosto 2010, 14:15:14 CEST da AndFan »