Autore Topic: Ottenere coordinate gps una volta sola...come?  (Letto 476 volte)

Offline smartgatto

  • Utente junior
  • **
  • Post: 96
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S5
  • Sistema operativo:
    Windows 7
Ottenere coordinate gps una volta sola...come?
« il: 04 Giugno 2015, 10:00:37 CEST »
0
ciao a tutti, sto cercando di imparare ad usare il gps e ho stilato questa app che riceve il segnale gps e fa vedere le coordinate. Il problema è che io vorrei che una volta recuperate le coordinate gps, si spegnesse il gps per evitare battery drain..
ho letto che si dovrebbe usare removeUpdates(); e ho pensato di metterlo dopo che ha recuperato le coordinate, ma nella mia prova non funziona...
mi potete aiutare? grazie mille!!

Codice: [Seleziona]
public class GPS_Test extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gps__test);

                LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
                MyCurrentLoctionListener locationListener = new MyCurrentLoctionListener();
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);



    }

// **************************************************************
    public class MyCurrentLoctionListener implements LocationListener{

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

            TextView longitudine = (TextView) findViewById(R.id.longitudine);
            TextView latitudine = (TextView) findViewById(R.id.latitudine);
            longitudine.setText(Double.toString(longix));
            latitudine.setText(Double.toString(latix));

            LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
            MyCurrentLoctionListener locationListener = new MyCurrentLoctionListener();
            locationManager.removeUpdates(locationListener);
        }

        @Override
        public void onStatusChanged(String s, int i, Bundle bundle) {

        }

        @Override
        public void onProviderEnabled(String s) {

        }

        @Override
        public void onProviderDisabled(String s) {

        }
    }

}

Post unito: 04 Giugno 2015, 13:31:37 CEST
Studiando qua e la ho capito che dovrei usare l'API di Google e quindi ho tirato giù il file di esempio (BasicLocationSample) che a quanto ho capito recupera l'ultima posiziona nota del telefono recuperata dalle altre applicazioni (giusto?) e immette le coordinate nella main activity.
In effetti funziona, ma c'è un problema..se disgraziatamente disattivo il GPS e lo riattivo l'applicazione mi restituisce sempre "No location detected. Make sure etc etc". E non c'è alcun verso di farlo rifunzionare...
Ora, poichè non sono una cima in inglese vorrei capire alcune cose...dove sbaglio? Per location si intende il GPS attivo, no?
E se io volessi, anzichè prendere l'ultima posizione nota, recuperare le coordinate attuali con l'API di google? come dovrei fare?
grazie mille!

Codice: [Seleziona]
public class MainActivity extends ActionBarActivity implements
        ConnectionCallbacks, OnConnectionFailedListener {

    protected static final String TAG = "basic-location-sample";
    protected GoogleApiClient mGoogleApiClient;
    protected Location mLastLocation;

    protected TextView mLatitudeText;
    protected TextView mLongitudeText;

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

        mLatitudeText = (TextView) findViewById((R.id.latitude_text));
        mLongitudeText = (TextView) findViewById((R.id.longitude_text));

        buildGoogleApiClient();
    }

    /**
     * Builds a GoogleApiClient. Uses the addApi() method to request the LocationServices API.
     */
    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();
    }

    @Override
    protected void onStart() {
        super.onStart();
        mGoogleApiClient.connect();
    }

    @Override
    protected void onStop() {
        super.onStop();
        if (mGoogleApiClient.isConnected()) {
            mGoogleApiClient.disconnect();
        }
    }

    /**
     * Runs when a GoogleApiClient object successfully connects.
     */
    @Override
    public void onConnected(Bundle connectionHint) {
        // Provides a simple way of getting a device's location and is well suited for
        // applications that do not require a fine-grained location and that do not need location
        // updates. Gets the best and most recent location currently available, which may be null
        // in rare cases when a location is not available.
        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
        if (mLastLocation != null) {
            mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
            mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
        } else {
            Toast.makeText(this, R.string.no_location_detected, Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void onConnectionFailed(ConnectionResult result) {
        // Refer to the javadoc for ConnectionResult to see what error codes might be returned in
        // onConnectionFailed.
        Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode());
    }


    @Override
    public void onConnectionSuspended(int cause) {
        // The connection to Google Play services was lost for some reason. We call connect() to
        // attempt to re-establish the connection.
        Log.i(TAG, "Connection suspended");
        mGoogleApiClient.connect();
    }
}



« Ultima modifica: 04 Giugno 2015, 13:31:37 CEST da smartgatto, Reason: Merged DoublePost »

Offline arlabs

  • Utente normale
  • ***
  • Post: 430
  • Respect: +49
    • Mostra profilo
  • Dispositivo Android:
    GalaxyS6, Nexus5
  • Play Store ID:
    AR Labs
  • Sistema operativo:
    Windows 10
Re:Ottenere coordinate gps una volta sola...come?
« Risposta #1 il: 08 Giugno 2015, 10:04:45 CEST »
+1
Devi registrarti con"requestLocationUpdates", per ottenere gli aggiornamenti della posizione.

Qui lo spiega abbastanza bene con il codice d'esempio: http://developer.android.com/training/location/receive-location-updates.html

Ciao.