Modificare le impostazioni di geolocalizzazione

Se la tua app deve richiedere la posizione o ricevere aggiornamenti delle autorizzazioni, dispositivo deve abilitare le impostazioni di sistema appropriate, come GPS o Wi-Fi scansione. Anziché attivare direttamente servizi come il GPS del dispositivo, specifica il livello richiesto di precisione/consumo energetico e l'intervallo di aggiornamento desiderato e il dispositivo apporta automaticamente modifiche alle impostazioni di sistema. Queste impostazioni sono definite LocationRequest .

Questa lezione mostra come utilizzare Client impostazioni per controllare quali impostazioni sono attivate e presenta le impostazioni di geolocalizzazione che consente all'utente di aggiornare le impostazioni con un solo tocco.

Configura servizi di geolocalizzazione

Per utilizzare i servizi di geolocalizzazione forniti da Google Play Services e il fornitore di servizi di localizzazione, connetti la tua app utilizzando il Client Impostazioni, dopodiché controllare le attuali impostazioni di geolocalizzazione e chiedere all'utente di attivare il le impostazioni richieste, se necessario.

Le app le cui funzioni usano i servizi di geolocalizzazione devono richiedere le autorizzazioni di accesso alla posizione, a seconda dei casi d'uso di queste funzionalità.

Configurare una richiesta di posizione

Per memorizzare i parametri per le richieste al provider di località combinato, crea un LocationRequest I parametri determinano il livello di precisione delle richieste di posizione. Per i dettagli di tutte le opzioni disponibili per le richieste di posizione, consulta le LocationRequest riferimento alla classe. Questa lezione imposta l'intervallo di aggiornamento più rapido intervallo e priorità, come descritto di seguito:

Intervallo di aggiornamento
setInterval() - Questo metodo imposta la frequenza in millisecondi alla quale la tua app preferisce ricevere aggiornamenti sulla posizione. Tieni presente che gli aggiornamenti della posizione potrebbero essere più veloce o più lenta di questa velocità per ottimizzare l'utilizzo della batteria oppure non essere del tutto privi di aggiornamenti (ad esempio, se il dispositivo non dispone di connettività).
Intervallo di aggiornamento più veloce
setFastestInterval() - Questo metodo imposta la frequenza più rapida in millisecondi a che la tua app può gestire gli aggiornamenti della posizione. A meno che la tua app non tragga vantaggio ricevere gli aggiornamenti più rapidamente rispetto al tasso specificato in setInterval(), non è necessario chiamare questo metodo.
Priorità

setPriority() - Questo metodo imposta la priorità della richiesta, in modo che il team di Google Play servizi di geolocalizzazione di Google offre un suggerimento efficace sulle origini di localizzazione da utilizzare. Sono supportati i seguenti valori:

  • PRIORITY_BALANCED_POWER_ACCURACY - Utilizza questa impostazione per richiedere la precisione della posizione all'interno di una città. di blocco, con una precisione di circa 100 metri. Questo è è considerata un livello approssimativo di accuratezza ed è probabile che consumi meno corrente. Con questa impostazione, è probabile che i servizi di geolocalizzazione utilizzino la rete Wi-Fi e sulla posizione delle torri cellulari. Tieni presente, tuttavia, che la scelta della posizione dipende da molti altri fattori, come le fonti disponibili.
  • PRIORITY_HIGH_ACCURACY - Utilizza questa impostazione per richiedere la posizione più precisa possibile. Con questa impostazione, è più probabile che i servizi di geolocalizzazione utilizzino il GPS per determinare la posizione.
  • PRIORITY_LOW_POWER - Utilizza questa impostazione per richiedere la precisione a livello di città, ovvero con una precisione di circa 10 chilometri. Questo è considerato un con un livello di precisione approssimativo e probabilmente consumerà meno energia.
  • PRIORITY_NO_POWER - Utilizza questa impostazione se hai bisogno di un impatto trascurabile sul consumo di corrente, ma vuoi ricevere aggiornamenti sulla posizione quando sono disponibili. Con questo l'impostazione, la tua app non attiva alcun aggiornamento della posizione, riceve posizioni attivate da altre app.

Crea la richiesta di posizione e imposta i parametri come mostrato in questa esempio di codice:

Kotlin

fun createLocationRequest() {
  val locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build()
}

Java

protected void createLocationRequest() {
  LocationRequest locationRequest = LocationRequest.Builder()
      .setIntervalMillis(10000)
      .setFastestIntervalMillis(5000)
      .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
      .build();
}

La priorità PRIORITY_HIGH_ACCURACY, combinato con ACCESS_FINE_LOCATION l'impostazione di autorizzazione definita nel file manifest dell'app, oltre a un aggiornamento rapido di 5000 millisecondi (5 secondi), determina la posizione di fornire aggiornamenti della posizione con una precisione di pochi metri. Questo approccio è appropriato per mappare le app che mostrano la posizione in tempo reale.

Suggerimento sul rendimento:se l'app accede al rete o svolge altre operazioni a lungo termine dopo aver ricevuto un aggiornamento della posizione, regola l'intervallo più rapido su un valore più basso. Questa modifica impedisce agli di ricevere aggiornamenti che non può utilizzare. Una volta completato il lavoro a lungo termine, imposta di nuovo l'intervallo più veloce su un valore veloce.

Visualizza le impostazioni di geolocalizzazione attuali

Dopo esserti connesso a Google Play Services e ai Servizi di geolocalizzazione API, puoi recuperare le impostazioni di geolocalizzazione attuali del dispositivo di un utente. Da fare crea un deployment LocationSettingsRequest.Builder, e aggiungi una o più richieste di posizione. Il seguente snippet di codice mostra come per aggiungere la richiesta di posizione creata nel passaggio precedente:

Kotlin

val builder = LocationSettingsRequest.Builder()
        .addLocationRequest(locationRequest)

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
     .addLocationRequest(locationRequest);

Dopodiché controlla se le impostazioni di geolocalizzazione correnti sono soddisfatte:

Kotlin

val builder = LocationSettingsRequest.Builder()

// ...

val client: SettingsClient = LocationServices.getSettingsClient(this)
val task: Task<LocationSettingsResponse> = client.checkLocationSettings(builder.build())

Java

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();

// ...

SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());

Quando la Task vengono completati, la tua app può controllare le impostazioni di geolocalizzazione esaminando lo stato il codice da LocationSettingsResponse . Per avere ancora più dettagli sullo stato attuale impostazioni di geolocalizzazione, l'app può chiamare LocationSettingsResponse dell'oggetto getLocationSettingsStates() .

Chiedi all'utente di modificare le impostazioni di geolocalizzazione

Per stabilire se le impostazioni di geolocalizzazione sono appropriate per la località richiesta, aggiungi un OnFailureListener a Task che convalida le impostazioni di geolocalizzazione. Poi controlla se Oggetto Exception passato a onFailure() è un'istanza del metodo ResolvableApiException, che indica che le impostazioni è necessario modificarla. Quindi, visualizza una finestra di dialogo che richiede all'utente l'autorizzazione per modifica le impostazioni di geolocalizzazione chiamando startResolutionForResult().

Il seguente snippet di codice mostra come determinare se la località dell'utente consentono ai servizi di geolocalizzazione di creare un LocationRequest e su come richiedere all'utente l'autorizzazione a modificare le impostazioni di geolocalizzazione, se necessario:

Kotlin

task.addOnSuccessListener { locationSettingsResponse ->
    // All location settings are satisfied. The client can initialize
    // location requests here.
    // ...
}

task.addOnFailureListener { exception ->
    if (exception is ResolvableApiException){
        // Location settings are not satisfied, but this can be fixed
        // by showing the user a dialog.
        try {
            // Show the dialog by calling startResolutionForResult(),
            // and check the result in onActivityResult().
            exception.startResolutionForResult(this@MainActivity,
                    REQUEST_CHECK_SETTINGS)
        } catch (sendEx: IntentSender.SendIntentException) {
            // Ignore the error.
        }
    }
}

Java

task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
    @Override
    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
    }
});

task.addOnFailureListener(this, new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        if (e instanceof ResolvableApiException) {
            // Location settings are not satisfied, but this can be fixed
            // by showing the user a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                ResolvableApiException resolvable = (ResolvableApiException) e;
                resolvable.startResolutionForResult(MainActivity.this,
                        REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
                // Ignore the error.
            }
        }
    }
});

Nella prossima lezione, Ricezione di aggiornamenti sulla posizione, programmi come ricevere aggiornamenti periodici sulla posizione.