Autore Topic: far apparire un toast in una determinata coordinata  (Letto 974 volte)

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
far apparire un toast in una determinata coordinata
« il: 07 Febbraio 2011, 12:47:08 CET »
0
Salve a tutti! voglio far accadere qualcosa quando si è in prossimità di una coordinata. per ora mi accontento di far apparire un taost, giusto per vedere come funziona il tutto.
Il problema è che se metto coordinate diverse da quelle in cui dovrebbe succedere qualcosa, funziona....
Se gli metto le coordinate in cui voglio che succeda qualcosa, sembra come se si impalla.... aspetto aspetto aspetto... ma anche nel logcat non appaiono righe di codice in rosso....
Codice (Java): [Seleziona]
package com.coordinate;

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.TextView;
import android.widget.Toast;

public class main extends Activity{
        Double Lat;//cordinate per calcolare dove sono
        Double Long;//   //    //     //     //    //
        Double lat_mia=41.16687446; //coordinate di dove vorrei arrivare
        Double long_mia=16.73184716;// //        //     //       //
        Double geoLat;// coordiante per calcolare dove sono convertite in geopoin
        Double geoLong;//  //           //        //          //           //
        Double geo_lat_mia;//coordinate mie convertite in geopoint
        Double geo_long_mia;// //           //                //
        public  Double[] coordinateMie= {lat_mia,long_mia};//array non geopoint per calcolare la distanza in metri
        TextView coordinate ;
        TextView arrivo;
        LocationManager locationManagerGPS;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.location);
                //visualizzo le coordinate di dove stò in questo momento
                ecco_dove_sono();
                // utilizzo dei locationmanager
                //vorrei arrivare a
                arrivo=(TextView)findViewById(R.id.TextView01);
                arrivo.setText("vorrei arrivare a : latitudine:"+lat_mia+",longitudine:"+long_mia);
                //quando arrivo visualizzo toast
                //questo dovrebbe esser fatto in automatico al cambiamento di coordianta , ovvero nel onLocationChanged

        }
        public void ecco_dove_sono(){
                locationManagerGPS = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

                // Registriamo il LocationListener al provider GPS
                locationManagerGPS.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListenerGPS);
        }
        LocationListener locationListenerGPS = new LocationListener() {
                public void onLocationChanged(Location location) {
                        if(location!=null){
                                // Aggiorna la location
                                Lat = location.getLatitude();
                                Long = location.getLongitude();
                                coordinate = (TextView) findViewById(R.id.coordinate);

                                coordinate.setText("sono in: latitude:"+Lat.toString()+" longitude:"+Long.toString());



                                //locationManagerGPS.removeUpdates(locationListenerGPS);
                        }else {
                                //No location found
                                coordinate.setText("sei in "+"no location found");
                        }
                        arrivato(location);



                }

                public void onProviderDisabled(String provider) {
                        // TODO Auto-generated method stub

                }

                public void onProviderEnabled(String provider) {
                        // TODO Auto-generated method stub

                }

                public void onStatusChanged(String provider, int status, Bundle extras) {
                        // TODO Auto-generated method stub

                }      
        };

        public void arrivato(Location location){
                //if((geoLat==lat_mia)&&(geoLong==long_mia)){
                if (location != null && distanceChecker(location,coordinateMie)<20) {
                        Toast.makeText(this, "ARRIVATO!!!!!!!", Toast.LENGTH_SHORT).show();
                }else
                        Toast.makeText(this, "non sei ancora arrivato!!!!!!!", Toast.LENGTH_SHORT).show();
        }
        private float distanceChecker(Location locazione_corrente, Double[] coordinateMie){
                //calcola la distanza in metri di due punti
                //per calcolarla la devo convertire in geopoint in geopoint
                //converto lat_mia e long_mia in geopoint
                Location t = new Location(locazione_corrente);
                //passo la prossima tappa, ovvero dove voglio arrivare
                t.setLatitude(coordinateMie[0]);
                t.setLongitude(coordinateMie[1]);
                return locazione_corrente.distanceTo(t);
        }


}

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re: far apparire un toast in una determinata coordinata
« Risposta #1 il: 07 Febbraio 2011, 13:46:24 CET »
0
Sei sicuro che il metodo distanceChecker funziona come dovrebbe?

Sent from my HTC Desire using Tapatalk

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:far apparire un toast in una determinata coordinata
« Risposta #2 il: 07 Febbraio 2011, 14:13:19 CET »
0
si scusatemi, i commenti del distanceChecker sono sbagliati.
ho preso spunto da questo distanceChecker:
Codice (Java): [Seleziona]
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.widget.Toast;


public class MyLocationListener implements LocationListener
{
    public Context contesto;
    public static double[] coordinate= new double[2];
    public GeoPoint nexttappa;
   
    public void setCont(Context cont){
        contesto=cont;
    }
   
    public double[] getPlace(){
        return coordinate;
    }
   
    public GeoPoint getMyGeoPoint(){
        double latitudine=coordinate[1] * 1000000;
        double longitudine=coordinate[2] * 1000000;
        int latint = (int)(latitudine * 1e6);
        int longint = (int)(longitudine * 1e6);
        GeoPoint myposition = new GeoPoint(latint,longint);
        return myposition;
    }
//formato mappe google
   
    /* public void setNextTappa(GeoPoint tappa){
         this.nexttappa=tappa;
     }*/

     
         /**
          * Calcola la distanza in metri tra un due punti GPS
          * @param myposition mia posizione
          * @param target prossima tappa
          * @return distanza
          */

//per fare l'aggiornameto in metri (flot)
         private float distanceChecker(Location myposition, GeoPoint target){
                 
                 Location t = new Location(myposition);
                 double lat_b= target.getLatitudeE6()/1e6;
                 double lng_b= target.getLongitudeE6()/1e6;
                 t.setLatitude(lat_b);
                 t.setLongitude(lng_b);
                return myposition.distanceTo(t);
                }
 
   
    public void onLocationChanged(Location loc) {
         
        if (loc != null && distanceChecker(loc,nexttappa)<50) {
           Toast.makeText(contesto,"SEI ARRIVATO! \n CONGRATULAZIONI!!",Toast.LENGTH_SHORT).show();
        }
    }

    public void onProviderDisabled(String provider) {
        Toast.makeText(contesto,"Connessione GPS persa",
                Toast.LENGTH_SHORT).show();
    }


    public void onProviderEnabled(String provider) {
        Toast.makeText(contesto,"Connessione GPS stabilita, attendere posizione...",
                Toast.LENGTH_SHORT).show();
    }


    public void onStatusChanged(String provider, int status,
        Bundle extras) {
        // TODO Auto-generated method stub
    }
}        

//prima setcontext
//getplace coordinate dove stò io
« Ultima modifica: 07 Febbraio 2011, 14:17:25 CET da softmystery »

Offline softmystery

  • Utente junior
  • **
  • Post: 105
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg optimus one
  • Sistema operativo:
    2.2
Re:far apparire un toast in una determinata coordinata
« Risposta #3 il: 07 Febbraio 2011, 18:12:42 CET »
0
ok ragazzi funziona! su emulatore no! si blocca... ma non credo che si blocchi realmente....perchè comunque sul dispositivo fisico continua ad elaborare funzionando perfettamente.....
Comunque quello di far partire un'azione da una specifica cordinata, vedo che è cosa molto ricercata.... forse uno snippet non sarebbe niente male.... vàbbè.... magari poi i moderatori del forum, lo hanno già fatto XD