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 insetInterval()
, 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.