Autore Topic: Il GPS non mi trova  (Letto 1682 volte)

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Il GPS non mi trova
« il: 15 Agosto 2013, 23:48:29 CEST »
0
Salve. Mi potete aiutare a capire cosa sbaglio? Ho scritto il codice che serve a localizzare il mio indirizzo della posizione , la latitudine e la longitudine ma non mi trova. Da ORE sto cercando di capire cosa devo fare.Grazie!

public class MainActivity extends Activity implements LocationListener {
    private TextView latituteField;
    private TextView longitudeField;
    private TextView addressField;
    private LocationManager locationManager;
    private String provider;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        latituteField = (TextView) findViewById(R.id.TextView02);
        longitudeField = (TextView) findViewById(R.id.TextView04);
        addressField = (TextView) findViewById(R.id.TextView05);


        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, true);
        Log.d("SomeTag", provider);
        Log.d("SomeTag", String.valueOf(locationManager.isProviderEnabled(provider)));
        Location location = locationManager.getLastKnownLocation(provider);


        if (location != null) {
            System.out.println("Provider " + provider + " has been selected.");
            onLocationChanged(location);
        } else {
            latituteField.setText("Please wait for location update...");
            longitudeField.setText("Please wait for location update...");
            addressField.setText("Please wait for location update...");
        }
    }


    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
    }


    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }

    @Override
    public void onLocationChanged(Location location) {
       
        double lat = location.getLatitude();
        double lng = location.getLongitude();

        Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
        StringBuilder builder = new StringBuilder();
        try {
            List<Address> address = geoCoder.getFromLocation(lat, lng, 1);
            int maxLines = address.get(0).getMaxAddressLineIndex();
            for (int i=0; i<maxLines; i++) {
                String addressStr = address.get(0).getAddressLine(i);
                builder.append(addressStr);
                builder.append(" ");
            }

            String fnialAddress = builder.toString();

            latituteField.setText(String.valueOf(lat));
            longitudeField.setText(String.valueOf(lng));
            addressField.setText(fnialAddress);

        } catch (IOException e) {}
        catch (NullPointerException e) {}
    }

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


    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Disabled provider " + provider,
                Toast.LENGTH_SHORT).show();
    }
}

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Il GPS non mi trova
« Risposta #1 il: 16 Agosto 2013, 22:54:31 CEST »
0
sbaglio o è un duplicato del messaggio http://www.anddev.it/index.php/topic,11749.0.html?

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #2 il: 18 Agosto 2013, 01:12:04 CEST »
0
Si scusate ma quando ho postato quella domanda mi ero appena registrato e non avevo ancora capito come funzionasse il sito, quindi non sapevo se avevo pubblicato o no quella domanda. Poi cancellai quel profilo e dopo mi accorsi che era lì, così ho creato un altro profilo. Scusate ancora e grazie per la risposta, funziona  ;-)

Offline lillogoal

  • Utente normale
  • ***
  • Post: 167
  • Respect: +4
    • Google+
    • lillosogliani
    • Mostra profilo
    • LilloNet
  • Dispositivo Android:
    Galaxy s3, Nexus 7,galaxy s advance,galaxy scl
  • Play Store ID:
    Lillonet Inc.
  • Sistema operativo:
    Windows 8,7 & Kali-Linux
Re:Il GPS non mi trova
« Risposta #3 il: 23 Agosto 2013, 10:19:43 CEST »
0
Come sei riuscito a risolvere???
Chi non progetta la sicurezza , programma il fallimento! K.M

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #4 il: 07 Settembre 2013, 02:08:51 CEST »
0
Ho aggiunto questa riga appena sotto criteria e funziona benissimo:

Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);

Anche se a me servirebbe solo ottenere il nome della mia città es.: Firenze,IT


Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Il GPS non mi trova
« Risposta #5 il: 07 Settembre 2013, 12:28:19 CEST »
0
Mi pare che mancano alcune cose:

1) devi impostare la accuracy (Coarse o Fine) nei Criteria
2) devi implementare i locationListener()

ecco il codice che usavo io:


Codice (Java): [Seleziona]
@Override
        public void onResume() {
                registerLocationListeners();
                super.onResume();

        }

 @Override
        public void onStop() {
                if (listenerFine != null) {
                        locationManager.removeUpdates(listenerFine);
                }
                if (listenerCoarse != null) {
                        locationManager.removeUpdates(listenerCoarse);
                }
                super.onStop();
        }
       protected void registerLocationListeners() {
                try {

                        locationManager = (LocationManager) this
                                        .getSystemService(Context.LOCATION_SERVICE);

                        // Initialize criteria for location providers
                        Criteria fine = new Criteria();
                        fine.setAccuracy(Criteria.ACCURACY_FINE);
                        Criteria coarse = new Criteria();
                        coarse.setAccuracy(Criteria.ACCURACY_COARSE);

                        // Get at least something from the device,
                        // could be very inaccurate though
                        currentLocation = locationManager
                                        .getLastKnownLocation(locationManager.getBestProvider(fine,
                                                        true));

                        if (listenerFine == null || listenerCoarse == null)
                                createLocationListeners();
                        // Will keep updating about every 500 ms until
                        // accuracy is about 1000 meters to get quick fix.
                        locationManager.requestLocationUpdates(
                                        locationManager.getBestProvider(coarse, true), 500, 1000,
                                        listenerCoarse);
                        // Will keep updating about every 500 ms until
                        // accuracy is about 50 meters to get accurate fix.
                        locationManager.requestLocationUpdates(
                                        locationManager.getBestProvider(fine, true), 500, 5,
                                        listenerFine);
                } catch (Exception e) {
                        Log.d(TAG, "Error in creating Location Listener in ListFountains");
                }

        }

        /**
         * Creates LocationListeners
         */

        private void createLocationListeners() {
                listenerCoarse = new LocationListener() {
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                switch (status) {
                                case LocationProvider.OUT_OF_SERVICE:
                                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                                        locationAvailable = false;
                                        break;
                                case LocationProvider.AVAILABLE:
                                        locationAvailable = true;
                                }
                        }

                        public void onProviderEnabled(String provider) {
                        }

                        public void onProviderDisabled(String provider) {
                        }

                        public void onLocationChanged(Location location) {
                                currentLocation = location;
                        }
                };

                listenerFine = new LocationListener() {
                        public void onStatusChanged(String provider, int status,
                                        Bundle extras) {
                                switch (status) {
                                case LocationProvider.OUT_OF_SERVICE:
                                case LocationProvider.TEMPORARILY_UNAVAILABLE:
                                        locationAvailable = false;
                                        break;
                                case LocationProvider.AVAILABLE:
                                        locationAvailable = true;

                                }
                        }

                        public void onProviderEnabled(String provider) {
                        }

                        public void onProviderDisabled(String provider) {
                        }

                        public void onLocationChanged(Location location) {
                                currentLocation = location;
                        }
                };
        }

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #6 il: 07 Settembre 2013, 22:28:32 CEST »
0
E questo ti restituiva solamente il nome della tua città?

Offline Reinhard

  • Utente junior
  • **
  • Post: 85
  • Respect: +16
    • Google+
    • rspisser
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5 Lollipop 5.1
  • Play Store ID:
    rspisser
  • Sistema operativo:
    Windows 7
Re:Il GPS non mi trova
« Risposta #7 il: 07 Settembre 2013, 22:57:18 CEST »
0
ciao,


se per "restituire" intendi chiamare un metodo che ti restituisce immediatamente la posizione attuale, non funziona in questo modo.

quando il GPS trova un fix on un aggiornamento, chiama il tuo onLocationChanged() dove hai a disposizione l'oggetto Location con le coordinate Latitudine, Longitudine, la precisione, etc


Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #8 il: 08 Settembre 2013, 00:03:20 CEST »
0
Ah ok, grazie!  ;-)

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #9 il: 16 Marzo 2015, 21:57:33 CET »
0
Salve ancora ragazzi, l'ironia della vita ha fatto sì che tornassi su questo topic.

Per una ragione a me misteriosa ho perso il file .java dove tenevo il corretto codice per la localizzazione tramite latitudine, longitudine e indirizzo che risolsi tempo fa. Lo risolsi, a quanto ho detto, aggiungendo
Codice: [Seleziona]
Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);sotto Criteria.
Il fatto è che non è al 100% corretto e ho un vuoto di memoria. Non riesco proprio ad avere le coordinate, non è che mi potreste aiutare?

Attualmente ho questo:
Codice: [Seleziona]
public class GEO extends Activity implements LocationListener {
    private TextView latituteField;
    private TextView longitudeField;
    private TextView addressField;
    private LocationManager locationManager;
    private String provider;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.geo);
        latituteField = (TextView) findViewById(R.id.txt1);
        longitudeField = (TextView) findViewById(R.id.txt2);
        addressField = (TextView) findViewById(R.id.txt3);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        Criteria criteria = new Criteria();
        provider = locationManager.getBestProvider(criteria, true);
        Log.d("SomeTag", provider);
        Log.d("SomeTag", String.valueOf(locationManager.isProviderEnabled(provider)));
        Location location = locationManager.getLastKnownLocation(provider);

     

        if (location != null) {
            System.out.println("Provider " + provider + " has been selected.");
            onLocationChanged(location);
        } else {
            latituteField.setText("Posizione non disponibile");
            longitudeField.setText("Posizione non disponibile");
            addressField.setText("Posizione non disponibile");
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        locationManager.requestLocationUpdates(provider, 400, 1, this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        locationManager.removeUpdates(this);
    }

    @Override
    public void onLocationChanged(Location location) {

        double lat = location.getLatitude();
        double lng = location.getLongitude();

        Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
        StringBuilder builder = new StringBuilder();
        try {
            List<Address> addresses = geoCoder.getFromLocation(lat, lng, 1);
            Address firstAddress = addresses.get(0);
            if(firstAddress != null) {
                int maxLines = firstAddress.getMaxAddressLineIndex();
                for (int i = 0; i < maxLines; i++) {
                    String addressStr = firstAddress.getAddressLine(i);
                    builder.append(addressStr);
                    builder.append(" ");
                }
                addressField.setText(builder.toString());
            }

            latituteField.setText(String.valueOf(lat));
            longitudeField.setText(String.valueOf(lng));

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

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

    }

    @Override
    public void onProviderEnabled(String provider) {
        Toast.makeText(this, "Enabled new provider " + provider,
                Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onProviderDisabled(String provider) {
        Toast.makeText(this, "Disabled provider " + provider,
                Toast.LENGTH_SHORT).show();
    }

}
« Ultima modifica: 16 Marzo 2015, 21:59:17 CET da Bo »

Offline LinkOut

  • Utente normale
  • ***
  • Post: 269
  • Respect: +37
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Il GPS non mi trova
« Risposta #10 il: 17 Marzo 2015, 09:44:56 CET »
0
Codice (Java): [Seleziona]
public class LocationDetector extends Service implements LocationListener {

    private final Context mContext;
       
    boolean isGPSEnabled = false;
    boolean isNetworkEnabled = true;
    boolean canGetLocation = false;

    Location location;
    double latitude;  
    double longitude;  

    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 20;
    private static final long MIN_TIME_BW_UPDATES = 300 *  1;

    protected LocationManager locationManager;

    public LocationDetector(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);
                        if (location != null) {
                            latitude = location.getLatitude();
                            longitude = location.getLongitude();
                        }
                    }
                }
                // 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);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                            }
                        }
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return location;
    }

    public void stopUsingGPS(){
        if(locationManager != null){
            locationManager.removeUpdates(LocationDetector.this);
        }
    }

    public double getLatitude(){
        if(location != null){
            latitude = location.getLatitude();
        }

        // return latitude
        return latitude;
    }

    public double getLongitude(){
        if(location != null){
            longitude = location.getLongitude();
        }

        // return longitude
        return longitude;
    }

    public boolean canGetLocation() {
        return this.canGetLocation;
    }

    @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 arg0) {
        return null;
    }

}

Usage:
Codice (Java): [Seleziona]
LocationDetector gps;
double latitude;
double longitude;
gps = new LocationDetector(this);

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

Saluti.

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #11 il: 17 Marzo 2015, 19:15:41 CET »
0
Ciao, ho provato il tuo codice e non sembra funzionare (mi dà lat-lng 0 ) inoltre non c'è nemmeno ciò che riguarda la parte di ottenere anche l'indirizzo.
Grazie davvero per la risposta ma sono più propenso a capire cosa c'è che non va nel mio codice.

Saluti

Offline tonno16

  • Utente storico
  • *****
  • Post: 1184
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Il GPS non mi trova
« Risposta #12 il: 18 Marzo 2015, 09:06:36 CET »
0
@Bo. Ricntrolla di avere messo i permessi nel manifest. Il codice postato da LinkOut è un buon algoritmo.

Offline Bo

  • Utente junior
  • **
  • Post: 64
  • Respect: +3
    • Mostra profilo
  • Sistema operativo:
    windows 7
Re:Il GPS non mi trova
« Risposta #13 il: 18 Marzo 2015, 10:00:47 CET »
0
@tonno16 i permessi ci sono. Mi ci sto rompendo la testa
Codice: [Seleziona]
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>

Offline LinkOut

  • Utente normale
  • ***
  • Post: 269
  • Respect: +37
    • Mostra profilo
  • Dispositivo Android:
    Xiaomi Mi5
Re:Il GPS non mi trova
« Risposta #14 il: 18 Marzo 2015, 11:12:40 CET »
0
Il codice che ti ho postato era di esempio, speravo ti aiutasse a capire come funziona la Geolocalizzazione.

Controlla nelle impostazioni del telefono che sia impostato su "Alta precisione" oppure che abbia tutte le spunte per quanto riguarda la geolocalizzazione.

Magari questo ti aiuta:

Codice (Java): [Seleziona]
//Ovviamente è solo un esempio...

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

try {
        List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
        ...
        Address fetchedAddress = addresses.get(0); //Qui ci sono tutte le informazioni che vuoi sulla tua posizione.
        } catch (IOException e) {
        // Vedi tu come trattare l'eccezione...
    }

Geocoder | Android Developers