Konum ayarlarını değiştirme

Uygulamanızın konum istemesi veya izin güncellemeleri alması gerekiyorsa cihazın GPS veya Wi-Fi gibi uygun sistem ayarlarını etkinleştirmesi gerekir taranıyor. Cihazın GPS'i gibi hizmetleri doğrudan etkinleştirmek yerine, Uygulamanız gereken doğruluk/güç tüketimi düzeyini belirtiyor yapar ve cihaz da uygun güncellemeleri otomatik olarak yapar ve sistem ayarlarında değişiklikler yapabilirsiniz. Bu ayarlar LocationRequest veri nesnesidir.

Bu derste, Ayarlar İstemcisi hangi ayarların etkinleştirildiğini kontrol edebilir ve Konum Ayarları'nı gösterebilirsiniz. tek bir dokunuşla ayarlarını güncellemesini sağlayan iletişim kutusu.

Konum hizmetlerini yapılandırma

Google Play Hizmetleri ve Google Play Hizmetleri tarafından sağlanan konum hizmetlerini kullanmak için kullanıyorsanız, uygulamanızı Google Apps'ta Ayarlar İstemcisi, ardından mevcut konum ayarlarını kontrol edin ve kullanıcıdan emin olun.

Özellikleri, konum hizmetlerini kullanan uygulamaların konum izni isteyebilir, bu özelliklerin kullanım alanlarına göre değişir.

Konum isteği oluşturma

Çok kaynaklı konum sağlayıcıya yapılan isteklere ilişkin parametreleri depolamak için LocationRequest. Parametreler, konum isteklerinin doğruluk düzeyini belirler. Örneğin, ayrıntıları görmek için LocationRequest sınıf referansını gösterir. Bu ders, güncelleme aralığını, en hızlı güncelleme aralığı ve önceliği aşağıda açıklandığı gibi ayarlayın:

Güncelleme aralığı
. setInterval() - Bu yöntem, uygulamanızın konum güncellemeleri alabilirsiniz. Konum güncellemelerinin bir miktar pil kullanımını optimize etmek için bu hızdan daha hızlı veya yavaş olabilir ya da hiçbir güncelleme olmamasına dikkat edin (örneğin, cihazın bağlantısı yoksa).
En hızlı güncelleme aralığı
. setFastestInterval() - Bu yöntem en hızlı hızı milisaniye cinsinden en hızlı şekilde Ayrıca, uygulamanız konum güncellemelerini işleyebilir. Uygulamanız belirtilen orandan daha hızlı güncelleme alıyor. setInterval() için bu yöntemi çağırmanıza gerek yoktur.
Öncelik

setPriority() - Bu yöntem, isteğin önceliğini belirler. Bu da Google Play'e hizmet konum hizmetleri, hangi konum kaynaklarının kullanılacağına dair güçlü bir ipucu. Aşağıdaki değerler desteklenir:

  • PRIORITY_BALANCED_POWER_ACCURACY - Bir şehir içinde konum hassasiyeti istemek için bu ayarı kullanın Bu, yaklaşık 100 metrelik bir doğruluk sağlar. Bu genel doğruluk düzeyi olarak kabul edilir ve kullanıcının daha az tüketeceği güç. Bu ayarla, konum hizmetleri büyük ihtimalle kablosuz bağlantı kullanır yardımcı olabilir. Ancak konum seçiminin, özellikle de sağlayıcı; hangi kaynakların kullanılabilir.
  • PRIORITY_HIGH_ACCURACY - Mümkün olan en kesin konumu istemek için bu ayarı kullanın. Entegre Bu ayarda, konum hizmetlerinin GPS kullanma olasılığı konum belirlemek için.
  • PRIORITY_LOW_POWER - Şehir düzeyinde kesinlik isteğinde bulunmak için bu ayarı kullanın. Şehir düzeyinde yaklaşık 10 kilometre doğrulukta. Bu, çoğunlukla daha az güç tüketir.
  • PRIORITY_NO_POWER - Güç tüketimi üzerinde önemli bir etkiye ihtiyacınız yoksa bu ayarı kullanın. ancak varsa konum güncellemelerini almak isteyen kullanıcılar. Bununla ayarı, uygulamanız konum güncellemelerini tetiklemez, ancak Diğer uygulamalar tarafından tetiklenen konumları alır.

Konum isteğini oluşturun ve parametreleri aşağıda gösterildiği gibi ayarlayın kod örneği:

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();
}

Projenin önceliği PRIORITY_HIGH_ACCURACY şununla birlikte: ACCESS_FINE_LOCATION Uygulama manifest dosyasında tanımladığınız izin ayarı ve hızlı güncelleme 5000 milisaniye (5 saniye) aralık, kaynaşmış konuma neden olur konum güncellemelerinin doğru yanıt vermesini sağlayabilirsiniz. Bu yaklaşım, konumu şurada gösteren harita uygulamaları için uygundur: yardımcı olur.

Performans ipucu: Uygulamanız ağ üzerinden çalışıyorsa veya konum güncellemesi aldıktan sonra uzun süre çalışan başka bir çalışma yapıyorsa en hızlı aralığı daha yavaş bir değere ayarlar. Bu ayarlama, uygulamanın kullanamadığı güncellemeleri almasını engeller. Uzun süreli işler tamamlandıktan sonra en hızlı aralığı tekrar hızlı bir değere ayarlayın.

Geçerli konum ayarlarını al

Google Play Hizmetleri'ne ve konum hizmetlerine bağlandıktan sonra API'de bir kullanıcının cihazının mevcut konum ayarlarını alabilirsiniz. Yapılacaklar bunun için bir LocationSettingsRequest.Builder ve bir veya daha fazla konum isteği ekleyin. Aşağıdaki kod snippet'i, sitenizin ifadesini ekleyin:

Kotlin

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

Java

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

Sonra, geçerli konum ayarlarının uygun olup olmadığını kontrol edin:

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());

Task işlemi tamamlandığında, uygulamanız duruma bakarak konum ayarlarını LocationSettingsResponse içinden alınan kod nesnesini tanımlayın. Alakalı müşteri formlarının mevcut durumu hakkında daha da konum ayarlarına bağlı olarak, uygulamanız LocationSettingsResponse nesnenin getLocationSettingsStates() yöntemidir.

Kullanıcıdan konum ayarlarını değiştirmesini iste

Konum ayarlarının konum için uygun olup olmadığını belirlemek isteği, bir - OnFailureListener Task nesnesini ifade eder. Ardından, Exception nesnesi, onFailure() yöntemi, ResolvableApiException sınıfıdır. Bu, ayarların değiştirilmelidir. Ardından, kullanıcının numaralı telefonu arayarak konum ayarlarını değiştirin startResolutionForResult() değerleridir.

Aşağıdaki kod snippet'i, kullanıcı konumunun ayarları, konum hizmetlerinin bir oluşturmasına izin veriyor LocationRequest ve kullanıcıdan konum ayarlarını değiştirme izni vermeniz gerekir:

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.
            }
        }
    }
});

Bir sonraki derste Konum Güncellemelerini Alma, TV'de düzenli konum güncellemelerini nasıl alacağınızı öğrenebilirsiniz.