CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 9 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 34 Thanks ricevuti nell'ultimo mese

Pagina 1 di 4 123 ... ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 34
Discussione:

Aiuto urgente : applicazione con GPS per esame maturità

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    17

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Aiuto urgente : applicazione con GPS per esame maturità

    Ciao ragazzi,tra poco iniziano gli esami di maturità ed io sto sviluppando un'applicazione che lavora con Maps e che si occupa di controllare i movimenti dell'utilizzatore del telefono affinchè egli rimanga all'interno di una specifica area delimitata.In sostanza legge l'attuale posizione GPS e controlla che non superi la distanza massima dal centro dell'area "protetta".In caso di allontanamento eccessivo,l'applicazione invia un SMS ad un numero preimpostato segnalndo l'effrazione.Ecco quello che ho fatto finora,che vi sembra:
    codice:
    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 android.content.Context;
    import android.content.res.Resources;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.telephony.SmsManager;
    import android.widget.Toast;
    
    
    public class GPS 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, 
                0, 
                0, 
                locationListener);
            
            mapView = (MapView) findViewById(R.id.mapview1);
            mc = mapView.getController();
        }
        
        @Override
        protected boolean isRouteDisplayed() {
            // TODO Auto-generated method stub
            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));
                   /*LocationProvider L = null;
                   Location control=new Location(L.getName());*/
                   Location control=new Location(loc);
                   Resources res=getResources();
                   Double newlat=Double.parseDouble(res.getString(R.string.Lat));
                   Double newlng=Double.parseDouble(res.getString(R.string.Lng));
                   control.setLatitude(newlat);
                   control.setLongitude(newlng);
                   Float dist=loc.distanceTo(control);
                    if(dist>Float.parseFloat(res.getString(R.string.MaxDist))) //controllo se mi sono allontanato troppo
                    {
    					/*SmsManager m = SmsManager.getDefault();
    					String destination = "numeroscelto";
    					String text = "Warning!The objective is leaving the security area!Actual position:Lat:" + loc.getLatitude() + " Lng:" + loc.getLongitude() +"";
    					m.sendTextMessage(destination, null, text, null, null);*/
    					Toast.makeText(getBaseContext(), 
    			        "Area violated,the Master user has been informed of your effraction!", 
    			        Toast.LENGTH_SHORT).show();
                    }
                    mc.animateTo(p);
                    mc.setZoom(16);                
                    mapView.invalidate();
                }
            }
           
    
            @Override
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }
    
            @Override
            public void onStatusChanged(String provider, int status, 
                Bundle extras) {
                // TODO Auto-generated method stub
            }
        }    
    }

    Ora ecco alcune domande:
    1) Vorrei fare in modo che ogni volta che l'utente tocca lo schermo compaia un Toast che segnala l'attuale distanza dall'area protetta

    2)Avrete notato che le coordinate dell'area protetta,la distanza massima consentita ed il numero di telefono da contattare in caso di violazione sono forniti tramite resources.C'è un modo per modificare tali risorse tramite l'applicazione?

  2.  
  3. #2
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Quote Originariamente inviato da asdabadabu Visualizza il messaggio
    1) Vorrei fare in modo che ogni volta che l'utente tocca lo schermo compaia un Toast che segnala l'attuale distanza dall'area protetta

    2)Avrete notato che le coordinate dell'area protetta,la distanza massima consentita ed il numero di telefono da contattare in caso di violazione sono forniti tramite resources.C'è un modo per modificare tali risorse tramite l'applicazione?
    1) Basta implementare View.ClickListener e legarla allo schermo (cioè alla view che vuoi rendere cliccabile)

    2) Perché non usi le preferences?

  4. Il seguente Utente ha ringraziato eafkuor per il post:

    asdabadabu (23-06-10)

  5. #3
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    17

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    1) Basta implementare View.ClickListener e legarla allo schermo (cioè alla view che vuoi rendere cliccabile)

    2) Perché non usi le preferences?
    Ok,provo a dare un'occhiata.Grazie

    Per quanto riguarda il codice come ti sembra?

  6. #4
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Ho cambiato qualcosina e commentato (non ho testato niente, l'ho modificato al volo con JCreator):

    codice:
    public class GPS extends MapActivity 
    {    
    	private LocationManager lm;
        private LocationListener locationListener;
    
        private MapView mapView;
        private MapController mc;
        
        
        //meglio usare delle variabili
        private double newlat, newlng, maxdist;
        
        
    
        /** 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, 
                0, 
                0, 
                locationListener);
            
            mapView = (MapView) findViewById(R.id.mapview1);
            mc = mapView.getController();
            
            
            //il codice qui sotto basta eseguirlo una volta sola
            //e non ogni volta che viene chiamata onLocationChanged()
            Resources res=getResources();
            
            //ti consiglio di usare le preferences qui, al posto delle resources
            newlat=Double.parseDouble(res.getString(R.string.Lat));
            newlng=Double.parseDouble(res.getString(R.string.Lng));
            maxdist=Double.parseDouble(res.getString(R.string.MaxDist);
        }   
        
        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));
                            
                   Location control=new Location(loc);
                   control.setLatitude(newlat);
                   control.setLongitude(newlng);
                   double dist=loc.distanceTo(control); //ho messo double qui, non e' bello mischiare float e double
                   
                    if(dist>maxdist) //controllo se mi sono allontanato troppo
                    {
                    	//qui toglierei la creazione di String destination e text
    					/*SmsManager m = SmsManager.getDefault();
    					String destination = "numeroscelto";
    					String text = "Warning!The objective is leaving the security area!Actual position:Lat:" + loc.getLatitude() + " Lng:" + loc.getLongitude() +"";
    					m.sendTextMessage(destination, null, text, null, null);*/
    					Toast.makeText(getBaseContext(), 
    			        "Area violated,the Master user has been informed of your effraction!", 
    			        Toast.LENGTH_SHORT).show();
                    }
                    mc.animateTo(p);
                    mc.setZoom(16);                
                    mapView.invalidate();
                }
            }
               
    }
    Comunque alla fine andava bene, però così è più pulito e ordinato.
    Un piccolo appunto: quando non serve, cerca di non usare le classi wrapper (Float, Double, Integer), ma usa i tipi base (float, double, int).

  7. Il seguente Utente ha ringraziato eafkuor per il post:

    asdabadabu (23-06-10)

  8. #5
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    17

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio

    Comunque alla fine andava bene, però così è più pulito e ordinato.
    Un piccolo appunto: quando non serve, cerca di non usare le classi wrapper (Float, Double, Integer), ma usa i tipi base (float, double, int).
    Grazie per l'aiuto,domani provo a sistemarlo appena torno dalla prima prova ()

  9. #6
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Dai dai che per farsi bocciare al liceo ci si deve mettere d'impegno

  10. Il seguente Utente ha ringraziato eafkuor per il post:

    asdabadabu (23-06-10)

  11. #7
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    17

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio
    1) Basta implementare View.ClickListener e legarla allo schermo (cioè alla view che vuoi rendere cliccabile)
    Dunque,ho provato ma sicuramente ho sbagliato qualcosa perchè non va
    codice:
     mapView.setOnClickListener(new View.OnClickListener() {
                        
            			
            			@Override
            			public void onClick(View v) {
            				// TODO Auto-generated method stub
            				Toast.makeText(getBaseContext(), 
            				        "Clic!", 
            				        Toast.LENGTH_SHORT).show();
            				
            			}
            		});
    Ho provato a metterlo prima fuori e poi nell'implementazione del LocationListener ma il risultato è lo stesso.
    Avrei inoltre bisogno di un aiutino con le preferences:con altre activity vorrei creare dei files contenenti delle stringhe e vorrei poi poter leggere questi files dalla mia MapActivity.Purtroppo non ho molta dimestichezza con Android e con Java in generale.Aiuto
    Ultima modifica di asdabadabu; 22-06-10 alle 17:48

  12. #8
    Senior Droid


    Registrato dal
    Feb 2010
    Messaggi
    305

    Ringraziamenti
    4
    Ringraziato 17 volte in 17 Posts
    Predefinito

    Quote Originariamente inviato da asdabadabu Visualizza il messaggio
    Dunque,ho provato ma sicuramente ho sbagliato qualcosa perchè non va
    codice:
     mapView.setOnClickListener(new View.OnClickListener() {
                        
            			
            			@Override
            			public void onClick(View v) {
            				// TODO Auto-generated method stub
            				Toast.makeText(getBaseContext(), 
            				        "Clic!", 
            				        Toast.LENGTH_SHORT).show();
            				
            			}
            		});
    Ho provato a metterlo prima fuori e poi nell'implementazione del LocationListener ma il risultato è lo stesso.
    Questo lo devi mettere dopo setContentView, nella onCreate() della activity che contiene mapView.
    Quindi devi fare qualcosa del genere:



    Quote Originariamente inviato da asdabadabu Visualizza il messaggio
    Avrei inoltre bisogno di un aiutino con le preferences:con altre activity vorrei creare dei files contenenti delle stringhe e vorrei poi poter leggere questi files dalla mia MapActivity.Purtroppo non ho molta dimestichezza con Android e con Java in generale.Aiuto
    Io di solito faccio così:





    Poi ad esempio per prendere un valore:


    Ci sono anche getBoolean, getDouble eccetera eccetera. Cerca di non mischiare i nomi dei valori e i loro tipi. La prima volta che prendi un valore, viene restituito il valore di default.

    Invece per salvare/sostituire un valore:



    Fammi sapere
    Ultima modifica di Andrea; 23-06-10 alle 18:46

  13. Il seguente Utente ha ringraziato eafkuor per il post:

    asdabadabu (23-06-10)

  14. #9
    Baby Droid


    Registrato dal
    Jun 2010
    Messaggi
    17

    Ringraziamenti
    5
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Quote Originariamente inviato da eafkuor Visualizza il messaggio

    Fammi sapere
    Domani e giovedì sarò impegnato a studiare per la terza prova,venerdì appena torno a casa provo.Grazie,gentilissimo

  15. #10
    Administrator L'avatar di Andrea


    Registrato dal
    Nov 2008
    Messaggi
    3,368
    Smartphone
    Nexus S, myTouch Slide 4g

    Ringraziamenti
    143
    Ringraziato 880 volte in 323 Posts
    Predefinito

    Ragazzi, C'è appositamente il tasto JAVA.

    Twitter @veke87

Pagina 1 di 4 123 ... ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy