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 ve daha fazla bilgi, uygulamanızın çok kaynaklı konum sağlayıcıdan alabileceği Location
nesnesinde bulunur. 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. Konumun doğruluğu, sağlayıcılara, istediğiniz konum izinlerine ve konum isteğinde belirlediğiniz seçeneklere göre belirlenir.
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ği gönderme
Uygulamanızın konum güncellemesi istemeden önce konum hizmetlerine bağlanması ve konum isteği göndermesi gerekir. Konum ayarlarını değiştirme konulu derste bu işlemi nasıl yapacağınız gösterilmektedir. Konum isteği gönderildikten sonra requestLocationUpdates()
numaralı telefonu arayarak düzenli güncellemeleri başlatabilirsiniz.
İ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. Güncellemelerin doğruluğu ve sıklığı, istediğiniz konum izinlerinden ve konum isteği nesnesinde belirlediğiniz seçeneklerden etkilenir.
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'ine
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. Boole işaretinin değerini etkinliğin örnekleri arasında koruma hakkında daha fazla bilgi için Etkinliğin Durumunu Kaydetme başlıklı makaleyi inceleyin.
Konum güncelleme geri çağırmasını tanımlayın
Çok kaynaklı konum sağlayıcı, LocationCallback.onLocationResult()
geri çağırma yöntemini çağırır. 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 durdurma
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 aşağıdaki kod örneğinde gösterildiği gibi removeLocationUpdates()
işlevini çağırın ve işleve bir LocationCallback
parametresi iletin:
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); }
Konum güncellemelerinin şu anda etkin olup olmadığını izlemek için requestingLocationUpdates
boole değerini kullanın. 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
nesnesinde depolanan bir örnek durumudur.
Aşağıdaki kod örneğinde, örneğin durumunu kaydetmek için etkinliğin onSaveInstanceState()
geri çağırma işlevinin nasıl kullanılacağı gösterilmektedir:
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 Activity sınıf referansına bakın.
Not: Daha kalıcı bir depolama alanı için:
kullanıcının tercihlerini
uygulamanızda
SharedPreferences
. Paylaşılan tercihi etkinliğinizin onPause()
yönteminde ayarlayın ve onResume()
yönteminde tercihi alın.
Tercihleri kaydetme hakkında daha fazla bilgi için Anahtar/değer çiftlerini kaydetme başlıklı makaleyi inceleyin.
Ek kaynaklar
Daha fazla bilgi edinmek için aşağıdaki kaynaklardan yararlanabilirsiniz:
Örnekler
- Android'de konum güncellemeleri alma işlemini gösteren örnek uygulama.