Autore Topic: Rileva coordinate GPS  (Letto 5191 volte)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Rileva coordinate GPS
« il: 24 Febbraio 2014, 10:51:53 CET »
0
Ciao a tutti,
ho già googolato molto, studiato guide, ma non riesco a capire se sono io o se c'è molta teoria e poca pratica.

Dovrei realizzare per una materia universitaria un progetto/app che mi permetta di ricevere il segnale GPS (coordinate: latitudine e longitudine) mediante il GPS integrato nello smartphone ad intervalli di "x" secondi oppure decido io cliccando un pulsante sul display quando prelevare; una volta prelevate queste coordinate le dovrei mandare ad un server che poi le passa su Google Maps per la stampa e quindi creare il tracciato. Praticamente dovrei creare un tracker GPS Android.

Utilizzo Eclipse come IDE.

Principalmente vorrei capire come prelevare queste coordinate GPS.

Attendo vostri consigli possibilmente dettagliati ed in maniera elementare visto che ho conoscenze ridotte nel campo della programmazione Android.

Grazie in anticipo

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Rileva coordinate GPS
« Risposta #1 il: 24 Febbraio 2014, 12:07:14 CET »
0
Ecco un esempio di come si prendono le coordinate GPS

Codice: [Seleziona]
public void getMyLocationAddress() {
        LocationDetector gps;
        double latitude;
        double longitude;
        gps = new LocationDetector(LaTuaActivity.this);

        if (gps.canGetLocation()){
            latitude = gps.getLatitude();
            longitude = gps.getLongitude();

            Geocoder geocoder= new Geocoder(LaTuaActivity.this, Locale.ITALIAN);

            try {
                List<Address> addresses = geocoder.getFromLocation(latitude,longitude, 1);

                if(addresses != null) {

                    Address fetchedAddress = addresses.get(0);
                    StringBuilder strAddress = new StringBuilder();

                    strAddress.append(fetchedAddress.getLocality()).append("\n"); // <- Qui hai l'address puoi farci cosa vuoi.

                }
                else
                    Toast.makeText(getApplicationContext(),"NON ti trovo...:",Toast.LENGTH_SHORT).show();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }else{
            gps.showSettingsAlert(); //<- GPS Disabilitato gli faccio vedere un alert
        }
    }

Invece per quanto riguarda gli aggiornamenti della posizione

Codice: [Seleziona]
    // Distanza minima in metri
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

    // Tempo trascorso dall'ultimo aggiornamento in Millisecondi
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

E questo si usa così;

Codice: [Seleziona]
locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,   // <- I provider sono: NETWORK_PROVIDER, GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);

Saluti

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Rileva coordinate GPS
« Risposta #2 il: 26 Febbraio 2014, 11:19:25 CET »
0
Grazie mille per la risposta, immagino sia la soluzione al mio problema ma per me che sono alle prime armi non è chiaro.

Mi spiego meglio.

Ho creato un nuovo "Android Application Project" mediante Eclipse. A questo punto mi ritrovo il mio classico esempio base "Hello World". Ho cambiato le scritte e inserito un nuovo pulsante.

Il codice da te suggerito lo dovrei inserire nel "MainActivity.java" ?

Come posso fare a legare il tutto in maniera semplice? Inoltre nel codice inviatomi mi hai scritto:

Codice: [Seleziona]
gps = new LocationDetector(LaTuaActivity.this);
al posto di "LaTuaActivity.this" dovrò scrivere: "MainActivity" visto che:
Codice: [Seleziona]
public class MainActivity extends Activity {
Inoltre copiando il codice in "MainActivity.java", mi da errori ovunque, errori dovuti alla mancanza di importazione, importo tutto quello che posso importare e tutti gli errori scompaiono tranne quello su:

Codice: [Seleziona]
LocationDetector gps;

allora mi domando. Cos'è: "LocationDetector" ?

Immagino che tu penserai, ma questo dove vuole arrivare se non è molto pratico, ma online vedo solo esempi su come fare applicazioni base "HelloWorld" ma su cose più complesse vedo solo che la gente fa domande ma le risposte non spiegano, a chi non ha conoscenze, come fare a capire.

Offline LinkOut

  • Utente normale
  • ***
  • Post: 272
  • Respect: +38
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Rileva coordinate GPS
« Risposta #3 il: 26 Febbraio 2014, 11:27:13 CET »
0
Non ti preoccupare, nessuno nasce imparato.

Allora...

Per prima cosa lascia perdere eclipse... io ti consiglio caldamente di usare Android studio oppure IntelliJ (Community IDE) per sviluppare in android. E' molto più semplice e intuitivo.

Gli errori che vedi sono dovuti ad importazioni mancanti, in questo caso di google... Devi importare tutto il necessario per poter usare i servizi di geolocalizzazione di google. Non è difficile da fare, ma tra API key (per le mappe), implementazione generale, ti ci vorrà un po di tempo.

Ti ho consigliato Android Studio per il semplice fatto che, una volta scaricati i file necessari (Da Android SDK Manager), importarli nel progetto ci vuole una riga di codice.

Prova a creare un nuovo progetto una volta scaricato uno di quei due IDE. E prova a rifare la stessa cosa... Vedrai che sarà tutto più facile ( sopratutto alle prime armi )

Quando ti scrivo "LaTuaActivity", intendo, come hai scritto tu, il context.

Saluti.

Ps. Per eventuali problemi scrivimi pure ;)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Rileva coordinate GPS
« Risposta #4 il: 26 Febbraio 2014, 22:26:45 CET »
0
Grazie, è un piacere trovare persone disponibili.

Guarda finalmente sono tornato a casa e ho trovato scaricato "Android Studio", l'ho appena installato su Mac. A primo impatto è molto simile ad Eclipse. Quali sono i vantaggi rispetto Eclipse?

Adesso vorrei iniziare a lavorarci.

Mettiamo caso che vorrei copiare il tuo codice e renderlo funzionante, dove lo devo mettere?
« Ultima modifica: 26 Febbraio 2014, 22:49:46 CET da pup3770 »

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #5 il: 27 Febbraio 2014, 10:44:35 CET »
0
Un consiglio, visto che stai partendo da zero...
...perché non segui un qualche tutorial? Almeno per familiarizzare con Activity ed altro prima di metterti a scrivere codice senza sapere dove metterlo.

Questo è il training di Google
Getting Started | Android Developers

Questi un paio di altri:
Android Cookbook: Home
Creare App Android: la Guida | Mobile HTML.it

Per quanto riguarda la localizzazione ora "la nuova frontiera", consigliata da Google è utilizzare i GooglePlayServices (lo trovi sempre nel tutorial di Google).
I vantaggi sono che l'uso della localizzazione (via GPS, Wifi, celle) è condivisa con le altre app, quindi c'è meno consumo di batteria e potresti trovarti la posizione già pronta senza attendere la ricerca.
I contro sono che possono installare i GooglePlayServices solo i dispositivi certificati da Google (che sono la grande maggioranza).

Ciao.

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Rileva coordinate GPS
« Risposta #6 il: 28 Febbraio 2014, 10:31:26 CET »
0
Grazie anche a te per il consiglio. Si, non posso fare altro che darti pienamente ragione. Ti dico sinceramente che una minima conoscenza, nel senso di scrivere messaggi a video o mettere dei tasti o creare diverse Activity l'ho già fatto (seguendo la guida ma l'ho fatto), il mio dubbio adesso è: ma se volessi scrivere un metodo che mi fa la somma di due valori che gli inserisco staticamente e me li stampa nell'app in un area di testo, come devo fare? il metodo lo devo mettere dove? Cioè io ho iniziato dando una bella ripassata a java in quanto la realizzazione delle app per android sembra essere molto ma molto simile. Ma sto avendo qualche difficoltà ad entrare nell'ottica della visualizzazione nei layout e menù

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #7 il: 28 Febbraio 2014, 14:14:16 CET »
0
Grazie anche a te per il consiglio. Si, non posso fare altro che darti pienamente ragione. Ti dico sinceramente che una minima conoscenza, nel senso di scrivere messaggi a video o mettere dei tasti o creare diverse Activity l'ho già fatto (seguendo la guida ma l'ho fatto), il mio dubbio adesso è: ma se volessi scrivere un metodo che mi fa la somma di due valori che gli inserisco staticamente e me li stampa nell'app in un area di testo, come devo fare? il metodo lo devo mettere dove? Cioè io ho iniziato dando una bella ripassata a java in quanto la realizzazione delle app per android sembra essere molto ma molto simile. Ma sto avendo qualche difficoltà ad entrare nell'ottica della visualizzazione nei layout e menù

Codice: [Seleziona]
void displaySum( int a, int b )
{
        int result = a + b;
       
        final TextView resultText = (TextView)findViewById(R.id.result_text);
        resultText.setText( Integer.toString( result ) );
}

Il dove lo metto dipende da come lo vuoi fare.
L'applicazione deve avere almeno un activity (findViewById è un metodo di un Activity)
Puoi dividerla in diverse activity ciascuna responabile di una "vista".
Personalmente tendo a seguire il concetto di "Document/View" cioé metto nelle activity (e fragment) ciò che è relativo a interazione con l'utente e visualizzazione ed "altrove" dati ed algoritmi.

Questi ultimi li organizzo in classi omogenee con iterfacce il più pulite possibile evitando cross-reference (uso quindi di callback-delegate o altro). Ma questo non ha a che vedere con Android in particolare, sono regole di buona programmazione in generale.
Quello che ha a che vedere con Android e per cui il concetto di Document/View di adatta meglio e che le activity possono essere distrutte e ricreate di continuo al cambio di configuratione (ad esempio se cambi orientamento del dispositivo). Quindi i dati (Document) è bene che non vengano distrutti (serializzarli tutti sarebbe scomodo ed oneroso). Le soluzioni sono 2: metterli nell'istanza della Applicazione (ereditando da essa) o mettere i dati in singleton.

Ciao.

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Rileva coordinate GPS
« Risposta #8 il: 04 Marzo 2014, 16:54:51 CET »
0
Ciao, grazie ancora per l'aiuto ma continuo a non capire.. come consigliato in questo post, ho scaricato l'IDE: Android Studio, ho creato un nuovo progetto e mi ritrovo le varie cartelle e sottocartelle: "app", "build", "src".

dentro "src" mi trovo "main" che contiene "java" e "res"

Dentro "java" trovo "MainActivity"; mentre dentro "res" trovo tutte le directory quali "layout", "menu", "values".

Se volessi inserire il codice proposto per la somma dove devo inserirlo?

Devo creare un "layout" e poi creare una "activity" dove c'è "MainActivity"? o diversamente?

Offline arlabs

  • Utente normale
  • ***
  • Post: 433
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #9 il: 04 Marzo 2014, 17:03:30 CET »
0
La MainActivity è un activity.

Quella che ti crea di default la IDE.

Il pezzo di codice che ti ho scritto era inteso da mettere nell'activity nel cui layout hai messo la TextView result_text.
Presumibilmente la MainActivity se non ne hai create altre.

Ciao.

P.S. Ti riconsiglio di seguire qualche tutorial.

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #10 il: 04 Marzo 2014, 19:01:44 CET »
0
Ecco un esempio di come si prendono le coordinate GPS

Codice: [Seleziona]
public void getMyLocationAddress() {
        LocationDetector gps;
        double latitude;
        double longitude;
        gps = new LocationDetector(LaTuaActivity.this);

        if (gps.canGetLocation()){
            latitude = gps.getLatitude();
            longitude = gps.getLongitude();

            Geocoder geocoder= new Geocoder(LaTuaActivity.this, Locale.ITALIAN);

            try {
                List<Address> addresses = geocoder.getFromLocation(latitude,longitude, 1);

                if(addresses != null) {

                    Address fetchedAddress = addresses.get(0);
                    StringBuilder strAddress = new StringBuilder();

                    strAddress.append(fetchedAddress.getLocality()).append("\n"); // <- Qui hai l'address puoi farci cosa vuoi.

                }
                else
                    Toast.makeText(getApplicationContext(),"NON ti trovo...:",Toast.LENGTH_SHORT).show();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }else{
            gps.showSettingsAlert(); //<- GPS Disabilitato gli faccio vedere un alert
        }
    }

Provando questo codice ho il seguente errore:

Codice: [Seleziona]
03-04 18:59:49.610: E/AndroidRuntime(8101): FATAL EXCEPTION: main
03-04 18:59:49.610: E/AndroidRuntime(8101): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.unifi/com.unifi.Mense}: java.lang.NullPointerException
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread.access$600(ActivityThread.java:140)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.os.Looper.loop(Looper.java:137)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread.main(ActivityThread.java:4898)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at java.lang.reflect.Method.invokeNative(Native Method)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at java.lang.reflect.Method.invoke(Method.java:511)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at dalvik.system.NativeStart.main(Native Method)
03-04 18:59:49.610: E/AndroidRuntime(8101): Caused by: java.lang.NullPointerException
03-04 18:59:49.610: E/AndroidRuntime(8101):         at com.unifi.Mense.onCreate(Mense.java:67)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.Activity.performCreate(Activity.java:5206)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
03-04 18:59:49.610: E/AndroidRuntime(8101):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
03-04 18:59:49.610: E/AndroidRuntime(8101):         ... 11 more


come mai?

Offline FrancescoAndroid

  • Utente junior
  • **
  • Post: 69
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    GiMiSiS Interactive
  • Sistema operativo:
    Android 2.3.3
Re:Rileva coordinate GPS
« Risposta #11 il: 07 Marzo 2014, 12:05:57 CET »
0
ma hai chiamato l'activity latuactivity?

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #12 il: 07 Marzo 2014, 16:12:08 CET »
0
ma hai chiamato l'activity latuactivity?

ovviamente..cmq ho risolto in un'altra maniera grazie! ;-)

Offline pup3770

  • Utente junior
  • **
  • Post: 89
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy s3
  • Sistema operativo:
    Android
Re:Rileva coordinate GPS
« Risposta #13 il: 07 Marzo 2014, 17:21:01 CET »
0
Ciao
Citazione
felasandroid
, puoi gentilmente spiegare come hai risolto, può tornare utile a tutti. Grazie

Offline felasandroid

  • Utente normale
  • ***
  • Post: 345
  • Respect: +10
    • Github
    • balduzziantonio
    • balduzziantonio.unifi
    • Mostra profilo
  • Dispositivo Android:
    Huawei P8 Lite
  • Play Store ID:
    FelasTech
  • Sistema operativo:
    Windows 10
Re:Rileva coordinate GPS
« Risposta #14 il: 07 Marzo 2014, 21:10:23 CET »
0
Ciao , puoi gentilmente spiegare come hai risolto, può tornare utile a tutti. Grazie

nella Activity principale metti

Codice (Java): [Seleziona]
 GPSTracker gpsTracker = new GPSTracker(this);
               
                if (gpsTracker.canGetLocation())
                {
                        String stringLatitude = String.valueOf(gpsTracker.latitude);
                       
                       
                        String stringLongitude = String.valueOf(gpsTracker.longitude);
                       
                       
                        String country = gpsTracker.getCountryName(this);
                       
                       
                        String city = gpsTracker.getLocality(this);
                       
                       
                        String postalCode = gpsTracker.getPostalCode(this);
                       
                       
                        String addressLine = gpsTracker.getAddressLine(this);
                       
                        address = city+" "+addressLine;
                       
            getData(address);

                       
                       
                }
                else
                {
                        // can't get location
            // GPS or Network is not enabled
            // Ask user to enable GPS/network in settings
                        gpsTracker.showSettingsAlert();
                }
                       

                     }

mentre la classe GPSTracker è:

Codice (Java): [Seleziona]
public class GPSTracker extends Service implements LocationListener
{
        private final Context mContext;
       
        //flag for GPS Status
        boolean isGPSEnabled = false;
       
        //flag for network status
        boolean isNetworkEnabled = false;
       
        boolean canGetLocation = false;
       
        Location location;
        double latitude;
        double longitude;
       
        //The minimum distance to change updates in metters
        private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; //10 metters
       
        //The minimum time beetwen updates in milliseconds
        private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
       
        //Declaring a Location Manager
        protected LocationManager locationManager;
       
        public GPSTracker(Context context)
        {
                this.mContext = context;
                getLocation();
        }
       
        public Location getLocation()
        {
                try
                {
                        locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
                       
                        //getting GPS status
                        isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
                       
                        //getting network status
                        isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
                       
                        if (!isGPSEnabled && !isNetworkEnabled)
                        {
                                // no network provider is enabled
                        }
                        else
                        {
                                this.canGetLocation = true;
                               
                                //First get location from Network Provider
                                if (isNetworkEnabled)
                                {
                                        locationManager.requestLocationUpdates(
                                                        LocationManager.NETWORK_PROVIDER,
                                                        MIN_TIME_BW_UPDATES,
                                                        MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                                       
                                        Log.d("Network", "Network");
                                       
                                        if (locationManager != null)
                                        {
                                                location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                                                updateGPSCoordinates();
                                        }
                                }
                               
                                //if GPS Enabled get lat/long using GPS Services
                                if (isGPSEnabled)
                                {
                                        if (location == null)
                                        {
                                                locationManager.requestLocationUpdates(
                                LocationManager.GPS_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                                               
                                                Log.d("GPS Enabled", "GPS Enabled");
                                               
                                                if (locationManager != null)
                                                {
                                                        location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                                                        updateGPSCoordinates();
                                                }
                                        }
                                }
                        }
                }
                catch (Exception e)
                {
                        //e.printStackTrace();
                        Log.e("Error : Location", "Impossible to connect to LocationManager", e);
                }
               
                return location;
        }
       
        public void updateGPSCoordinates()
        {
                if (location != null)
                {
                        latitude = location.getLatitude();
                        longitude = location.getLongitude();
                }
        }

        /**
         * Stop using GPS listener
         * Calling this function will stop using GPS in your app
         */

       
        public void stopUsingGPS()
        {
                if (locationManager != null)
                {
                        locationManager.removeUpdates(GPSTracker.this);
                }
        }
       
        /**
         * Function to get latitude
         */

        public double getLatitude()
        {
                if (location != null)
                {
                        latitude = location.getLatitude();
                }
               
                return latitude;
        }
       
        /**
         * Function to get longitude
         */

        public double getLongitude()
        {
                if (location != null)
                {
                        longitude = location.getLongitude();
                }
                       
                return longitude;
        }
       
        /**
         * Function to check GPS/wifi enabled
         */

        public boolean canGetLocation()
        {
                return this.canGetLocation;
        }
       
        /**
         * Function to show settings alert dialog
         */

        public void showSettingsAlert()
        {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
               
                //Setting Dialog Title
                alertDialog.setTitle(R.string.GPSAlertDialogTitle);
               
                //Setting Dialog Message
                alertDialog.setMessage(R.string.GPSAlertDialogMessage);
               
                //On Pressing Setting button
                alertDialog.setPositiveButton(R.string.settings, new DialogInterface.OnClickListener()
                {      
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                                Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                                mContext.startActivity(intent);
                        }
                });
               
                //On pressing cancel button
                alertDialog.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener()
                {      
                        @Override
                        public void onClick(DialogInterface dialog, int which)
                        {
                                dialog.cancel();
                        }
                });
               
                alertDialog.show();
        }
       
        /**
         * Get list of address by latitude and longitude
         * @return null or List<Address>
         */

        public List<Address> getGeocoderAddress(Context context)
        {
                if (location != null)
                {
                        Geocoder geocoder = new Geocoder(context, Locale.ENGLISH);
                        try
                        {
                                List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
                                return addresses;
                        }
                        catch (IOException e)
                        {
                                //e.printStackTrace();
                                Log.e("Error : Geocoder", "Impossible to connect to Geocoder", e);
                        }
                }
               
                return null;
        }
       
        /**
         * Try to get AddressLine
         * @return null or addressLine
         */

        public String getAddressLine(Context context)
        {
                List<Address> addresses = getGeocoderAddress(context);
                if (addresses != null && addresses.size() > 0)
                {
                        Address address = addresses.get(0);
                        String addressLine = address.getAddressLine(0);
                       
                        return addressLine;
                }
                else
                {
                        return null;
                }
        }
       
        /**
         * Try to get Locality
         * @return null or locality
         */

        public String getLocality(Context context)
        {
                List<Address> addresses = getGeocoderAddress(context);
                if (addresses != null && addresses.size() > 0)
                {
                        Address address = addresses.get(0);
                        String locality = address.getLocality();
                       
                        return locality;
                }
                else
                {
                        return null;
                }
        }
       
        /**
         * Try to get Postal Code
         * @return null or postalCode
         */

        public String getPostalCode(Context context)
        {
                List<Address> addresses = getGeocoderAddress(context);
                if (addresses != null && addresses.size() > 0)
                {
                        Address address = addresses.get(0);
                        String postalCode = address.getPostalCode();
                       
                        return postalCode;
                }
                else
                {
                        return null;
                }
        }
       
        /**
         * Try to get CountryName
         * @return null or postalCode
         */

        public String getCountryName(Context context)
        {
                List<Address> addresses = getGeocoderAddress(context);
                if (addresses != null && addresses.size() > 0)
                {
                        Address address = addresses.get(0);
                        String countryName = address.getCountryName();
                       
                        return countryName;
                }
                else
                {
                        return null;
                }
        }
       
        @Override
        public void onLocationChanged(Location location)
        {      
        }

        @Override
        public void onProviderDisabled(String provider)
        {      
        }

        @Override
        public void onProviderEnabled(String provider)
        {      
        }

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

        @Override
        public IBinder onBind(Intent intent)
        {
                return null;
        }


« Ultima modifica: 07 Marzo 2014, 21:13:29 CET da felasandroid »