Konum bilgilerinin uygun şekilde kullanılması Google
uygulamasını indirin. Örneğin, uygulamanız kullanıcının yürürken yolunu bulmasına yardımcı oluyorsa veya
veya uygulamanız öğelerin konumunu izliyorsa
düzenli aralıklarla izleyin. Şirketlerin yanı sıra
(enlem ve boylam) öne çıkarıyorsanız, kullanıcıya daha ayrıntılı
yön (yatay seyahat yönü), rakım veya
durmasına yol açabilir. Bu bilgileri ve daha fazlasını şurada bulabilirsiniz:
Location
.
veya
çok kaynaklı
konum sağlayıcı. Buna karşılık API, uygulamanızı belirli aralıklarla
mevcut konuma göre, mevcut en iyi konum
GPS (Küresel Konumlandırma Sistemi) gibi sağlayıcılar için geçerlidir. Sonuçların doğruluğu
sağlayıcı tarafından belirlendiğinden,
sahip olduğunuz konum izinleri
istenen ve konum isteğinde belirlediğiniz seçenekler yer alır.
Bu ders, bir cihazın
konum bilgilerini
requestLocationUpdates()
yöntemini kullanabilirsiniz.
Bilinen son konumu alma
Cihazın bilinen son konumu, saptamak için gereken
başlamadan önce, uygulamanın bilinen bir konuma sahip olduğundan emin olarak
periyodik konum güncellemeleri. Şu dersteki ders:
Bilinen Son Konumu alma bölümünde,
arayarak bilinen son konumu nasıl öğrenebilirim
getLastLocation()
.
Aşağıdaki bölümlerde yer alan snippet'ler, uygulamanızın
bilinen son konumu aldı ve bunu
Genel değişkende Location
nesnesi
mCurrentLocation
.
Konum isteğinde bulunma
Konum güncellemesi istemeden önce uygulamanızın konuma bağlanması gerekir
yapabilir ve konum isteğinde bulunabilirsiniz. Şu dersteki ders:
Konum Ayarlarını Değiştirme
bunu nasıl yapacağınızı gösterir. Konum isteği oluşturulduktan sonra,
almak için
requestLocationUpdates()
.
İsteğin biçimine bağlı olarak, çok kaynaklı konum sağlayıcısı
şunu çağırır:
LocationCallback.onLocationResult()
geri çağırma yöntemini kullanır ve bu yönteme Location
nesnelerinin bir listesini iletir veya
CANNOT TRANSLATE
PendingIntent
öğesini tıklayın. Testlerin doğruluğu ve sıklığı
güncellemeler talep ettiğiniz konum izinlerinden ve Google'ın
konum isteği nesnesinde belirlediğiniz seçeneklerdir.
Bu derste,
LocationCallback
yaklaşımını benimseyin. Telefonla arama
requestLocationUpdates()
örneğinizi geçirerek
LocationRequest
nesne,
ve LocationCallback
.
Aşağıdaki kod örneğinde gösterildiği gibi bir startLocationUpdates()
yöntemi tanımlayın:
Kotlin
override fun onResume() { super.onResume() if (requestingLocationUpdates) startLocationUpdates() } private fun startLocationUpdates() { fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()) }
Java
@Override protected void onResume() { super.onResume(); if (requestingLocationUpdates) { startLocationUpdates(); } } private void startLocationUpdates() { fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()); }
Yukarıdaki kod snippet'inin bir boole flag'i olduğuna dikkat edin.
requestingLocationUpdates
, kullanıcının konum bilgisini açıp açmadığını izlemek için kullanılır
açık veya kapalı konuma getirin. Kullanıcılar konum güncellemelerini devre dışı bıraktıysa bilgi verebilirsiniz:
hakkında daha fazla bilgi edinin. Örneğin,
boole flag'inin değerini koruma hakkında daha fazla bilgi
Etkinlik Durumunu Kaydetme bölümüne bakın.
Konum güncelleme geri çağırmasını tanımlayın
Çok kaynaklı konum sağlayıcı
LocationCallback.onLocationResult()
geri çağırma yöntemini kullanın. Gelen bağımsız değişken bir liste içeriyor Location
konumun enlem ve boylamını içeren nesne. Aşağıdaki snippet
nasıl uygulayacağınızı gösterir
LocationCallback
arayüzünü kullanıp yöntemi tanımlayın, ardından konum güncellemesinin zaman damgasını alın
ve enlem, boylam ve zaman damgasını uygulamanızın kullanıcısına görüntüleyin
arayüz:
Kotlin
private lateinit var locationCallback: LocationCallback // ... override fun onCreate(savedInstanceState: Bundle?) { // ... locationCallback = object : LocationCallback() { override fun onLocationResult(locationResult: LocationResult?) { locationResult ?: return for (location in locationResult.locations){ // Update UI with location data // ... } } } }
Java
private LocationCallback locationCallback; // ... @Override protected void onCreate(Bundle savedInstanceState) { // ... locationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { if (locationResult == null) { return; } for (Location location : locationResult.getLocations()) { // Update UI with location data // ... } } }; }
Konum güncellemelerini durdur
Etkinlik olduğunda konum güncellemelerini durdurmak isteyip istemediğinizi düşünün
başka bir uygulamaya veya başka bir uygulamaya geçmesi gibi
aynı uygulamada farklı etkinlikler. Bu, gücü azaltmak için faydalı olabilir
uygulamanın tüketilmesi durumunda bile veri toplaması gerekmemesi
arka planda çalışıyor. Bu bölümde, Search Ads 360'ta
etkinliğin
onPause()
yöntemini çağırın.
Konum güncellemelerini durdurmak için şu numarayı arayın:
removeLocationUpdates()
ona
LocationCallback
,
aşağıdaki kod örneğinde gösterildiği gibidir:
Kotlin
override fun onPause() { super.onPause() stopLocationUpdates() } private fun stopLocationUpdates() { fusedLocationClient.removeLocationUpdates(locationCallback) }
Java
@Override protected void onPause() { super.onPause(); stopLocationUpdates(); } private void stopLocationUpdates() { fusedLocationClient.removeLocationUpdates(locationCallback); }
İzlemek için bir boole değeri (requestingLocationUpdates
) kullanın
konum güncellemelerinin açık olup olmadığı. Etkinliğin
onResume()
yöntemi, kontrol edin
Konum güncellemelerinin şu anda etkin olup olmadığını ve etkin değilse bunları etkinleştirebilirsiniz:
Kotlin
override fun onResume() { super.onResume() if (requestingLocationUpdates) startLocationUpdates() }
Java
@Override protected void onResume() { super.onResume(); if (requestingLocationUpdates) { startLocationUpdates(); } }
Etkinliğin durumunu kaydet
Cihaz yapılandırmasında bir değişiklik (ör. ekrandaki bir değişiklik)
mevcut etkinliğin yok edilmesine neden olabilir. Sizin
Bu nedenle uygulamanın, etkinliği yeniden oluşturmak için ihtiyaç duyduğu tüm bilgileri depolaması gerekir.
Bunu yapmanın bir yolu,
Bundle
nesne algılandı.
Aşağıdaki kod örneğinde, etkinliğin
onSaveInstanceState()
geri çağırma işlevini kullanın:
Kotlin
override fun onSaveInstanceState(outState: Bundle?) { outState?.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates) super.onSaveInstanceState(outState) }
Java
@Override protected void onSaveInstanceState(Bundle outState) { outState.putBoolean(REQUESTING_LOCATION_UPDATES_KEY, requestingLocationUpdates); // ... super.onSaveInstanceState(outState); }
Geri yüklemek için updateValuesFromBundle()
yöntemi tanımlayın
etkinliğin önceki örneğine ait kayıtlı değerler
kullanılabilir. Etkinlikten yöntemi çağırın
onCreate()
yöntemini kullanarak
şu kod örneğine bakalım:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { // ... updateValuesFromBundle(savedInstanceState) } private fun updateValuesFromBundle(savedInstanceState: Bundle?) { savedInstanceState ?: return // Update the value of requestingLocationUpdates from the Bundle. if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) { requestingLocationUpdates = savedInstanceState.getBoolean( REQUESTING_LOCATION_UPDATES_KEY) } // ... // Update UI to match restored state updateUI() }
Java
@Override public void onCreate(Bundle savedInstanceState) { // ... updateValuesFromBundle(savedInstanceState); } private void updateValuesFromBundle(Bundle savedInstanceState) { if (savedInstanceState == null) { return; } // Update the value of requestingLocationUpdates from the Bundle. if (savedInstanceState.keySet().contains(REQUESTING_LOCATION_UPDATES_KEY)) { requestingLocationUpdates = savedInstanceState.getBoolean( REQUESTING_LOCATION_UPDATES_KEY); } // ... // Update UI to match restored state updateUI(); }
Örnek durumunu kaydetme hakkında daha fazla bilgi için Android Etkinlik sınıf referansı.
Not: Daha kalıcı bir depolama alanı için:
kullanıcının tercihlerini
uygulamanızda
SharedPreferences
. Paylaşılan tercihi şurada ayarlayın:
etkinliğinizin onPause()
yöntemi ve
onResume()
içinde tercihi alır.
Tercihleri kaydetme hakkında daha fazla bilgi için şu bölümü okuyun:
Kaydediliyor
Anahtar/Değer Kümeleri.
Ek kaynaklar
Daha fazla bilgi edinmek için aşağıdaki kaynaklardan yararlanın:
Örnekler
- Android'de konum güncellemelerinin alındığını gösteren örnek uygulama.