Coğrafi sınırları oluşturma ve izleme

Coğrafi sınırlama, kullanıcının mevcut konumunun farkındalığını, kullanıcının ilgisini çekebilecek konumlara yakınlığının farkındalığıyla birleştirir. İlgilenilen bir konumu işaretlemek için enlem ve boylamını belirtirsiniz. Konumun yakınlığını ayarlamak için yarıçap ekleyin. Enlem, boylam ve yarıçap, ilgilenilen konumun etrafında dairesel bir alan veya çit oluşturarak coğrafi çit tanımlar.

Uygulama ve cihaz kullanıcısı başına 100 olmak üzere birden fazla etkin coğrafi sınırlı alan oluşturabilirsiniz. Her coğrafi sınır için Konum Hizmetleri'nden giriş ve çıkış etkinlikleri göndermesini isteyebilir veya bir etkinliği tetiklemeden önce coğrafi sınır alanında beklenecek ya da kalınacak süreyi belirtebilirsiniz. Milisaniye cinsinden bir son kullanma süresi belirterek herhangi bir coğrafi sınırlama alanının süresini sınırlayabilirsiniz. Coğrafi sınırlama süresi dolduktan sonra Konum Hizmetleri bu sınırlamayı otomatik olarak kaldırır.

Bu derste, coğrafi çitleri nasıl ekleyip kaldıracağınız ve ardından BroadcastReceiver kullanarak coğrafi çit geçişlerini nasıl dinleyeceğiniz gösterilmektedir.

Not: Wear cihazlarda coğrafi sınırlama API'leri güçten verimli bir şekilde yararlanmaz. Wear'da bu API'lerin kullanılması önerilmez. Daha fazla bilgi için Gücü ve pili koruma başlıklı makaleyi inceleyin.

Coğrafi sınır izleme için ayarlama

Coğrafi sınırlı alan izleme isteğinde bulunmanın ilk adımı, gerekli izinleri istemektir. Coğrafi sınırlama özelliğini kullanmak için uygulamanızın aşağıdakileri istemesi gerekir:

Daha fazla bilgi için konum izni isteme ile ilgili kılavuza bakın.

Coğrafi sınırdan geçişleri dinlemek için BroadcastReceiver kullanmak istiyorsanız hizmet adını belirten bir öğe ekleyin. Bu öğe, <application> öğesinin alt öğesi olmalıdır:

<application
   android:allowBackup="true">
   ...
   <receiver android:name=".GeofenceBroadcastReceiver"/>
<application/>

Konum API'lerine erişmek için Geofencing istemcisinin bir örneğini oluşturmanız gerekir. İstemcinizi nasıl bağlayacağınızı öğrenmek için:

Kotlin

lateinit var geofencingClient: GeofencingClient

override fun onCreate(savedInstanceState: Bundle?) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this)
}

Java

private GeofencingClient geofencingClient;

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    geofencingClient = LocationServices.getGeofencingClient(this);
}

Coğrafi sınırlar oluşturma ve ekleme

Uygulamanızın, Geofence nesneleri oluşturmak için konum API'sinin oluşturucu sınıfını, bunları eklemek için ise kolaylık sınıfını kullanarak coğrafi sınırlar oluşturması ve eklemesi gerekir. Ayrıca, coğrafi sınırlı alan geçişleri gerçekleştiğinde Konum Hizmetleri'nden gönderilen amaçları işlemek için bu bölümde gösterildiği gibi bir PendingIntent tanımlayabilirsiniz.

Not: Tek kullanıcılı cihazlarda uygulama başına 100 coğrafi sınırlama sınırı vardır. Çok kullanıcılı cihazlarda ise cihaz kullanıcısı başına uygulama başına 100 coğrafi sınırlama sınırı vardır.

Coğrafi sınır nesneleri oluşturma

Öncelikle, Geofence.Builder simgesini kullanarak bir coğrafi sınır oluşturun. Coğrafi sınır için istediğiniz yarıçapı, süreyi ve geçiş türlerini ayarlayın. Örneğin, bir liste nesnesini doldurmak için:

Kotlin

geofenceList.add(Geofence.Builder()
    // Set the request ID of the geofence. This is a string to identify this
    // geofence.
    .setRequestId(entry.key)

    // Set the circular region of this geofence.
    .setCircularRegion(
        entry.value.latitude,
        entry.value.longitude,
        Constants.GEOFENCE_RADIUS_IN_METERS
    )

    // Set the expiration duration of the geofence. This geofence gets automatically
    // removed after this period of time.
    .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS)

    // Set the transition types of interest. Alerts are only generated for these
    // transition. We track entry and exit transitions in this sample.
    .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER or Geofence.GEOFENCE_TRANSITION_EXIT)

    // Create the geofence.
    .build())

Java

geofenceList.add(new Geofence.Builder()
    // Set the request ID of the geofence. This is a string to identify this
    // geofence.
    .setRequestId(entry.getKey())

    .setCircularRegion(
            entry.getValue().latitude,
            entry.getValue().longitude,
            Constants.GEOFENCE_RADIUS_IN_METERS
    )
    .setExpirationDuration(Constants.GEOFENCE_EXPIRATION_IN_MILLISECONDS)
    .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER |
            Geofence.GEOFENCE_TRANSITION_EXIT)
    .build());

Bu örnek, verileri bir sabitler dosyasından çeker. Uygulamalar, kullanıcının konumuna göre coğrafi sınırlı alanları dinamik olarak oluşturabilir.

Coğrafi sınırlı alanları ve ilk tetikleyicileri belirtin

Aşağıdaki snippet, izlenecek coğrafi çitleri belirtmek ve ilgili coğrafi çit etkinliklerinin nasıl tetikleneceğini ayarlamak için GeofencingRequest sınıfını ve iç içe yerleştirilmiş GeofencingRequestBuilder sınıfını kullanır:

Kotlin

private fun getGeofencingRequest(): GeofencingRequest {
    return GeofencingRequest.Builder().apply {
        setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER)
        addGeofences(geofenceList)
    }.build()
}

Java

private GeofencingRequest getGeofencingRequest() {
    GeofencingRequest.Builder builder = new GeofencingRequest.Builder();
    builder.setInitialTrigger(GeofencingRequest.INITIAL_TRIGGER_ENTER);
    builder.addGeofences(geofenceList);
    return builder.build();
}

Bu örnekte iki coğrafi sınır tetikleyicisinin kullanımı gösterilmektedir. GEOFENCE_TRANSITION_ENTER geçişi, bir cihaz coğrafi sınıra girdiğinde, GEOFENCE_TRANSITION_EXIT geçişi ise bir cihaz coğrafi sınırdan çıktığında tetiklenir. Belirtme INITIAL_TRIGGER_ENTER, konum hizmetlerine GEOFENCE_TRANSITION_ENTER cihaz zaten coğrafi sınırlı alanın içindeyse tetiklenmesi gerektiğini bildirir.

Çoğu durumda, bunun yerine INITIAL_TRIGGER_DWELL kullanmak tercih edilebilir. Bu tetikleyici, etkinlikleri yalnızca kullanıcı bir coğrafi sınırda belirli bir süre durduğunda tetikler. Bu yaklaşım, bir cihaz kısa süreliğine coğrafi sınırlara girip çıktığında çok sayıda bildirim gönderilmesinden kaynaklanan "uyarı spam'ini" azaltmaya yardımcı olabilir. Coğrafi sınırlardan en iyi sonuçları elde etmeye yönelik bir diğer strateji de minimum 100 metre yarıçap belirlemektir. Bu, tipik kablosuz ağların konum doğruluğunu hesaba katmaya ve cihazın güç tüketimini azaltmaya yardımcı olur.

Coğrafi sınırdan geçişler için bir yayın alıcısı tanımlama

Konum Hizmetleri'nden gönderilen bir Intent, uygulamanızda çeşitli işlemleri tetikleyebilir ancak bileşenler yalnızca bir kullanıcı işlemine yanıt olarak görünür hale gelmelidir. Bu nedenle, bir etkinlik veya parça başlatmamalıdır. Çoğu durumda, BroadcastReceiver, coğrafi sınırlama geçişini yönetmek için iyi bir yöntemdir. A BroadcastReceiver, bir etkinlik gerçekleştiğinde (ör. coğrafi sınıra giriş veya çıkış) güncellemeler alır ve uzun süren arka plan çalışmasını başlatabilir.

Aşağıdaki snippet'te, BroadcastReceiver başlatan bir PendingIntent öğesinin nasıl tanımlanacağı gösterilmektedir:

Kotlin

class MainActivity : AppCompatActivity() {

    // ...

    private val geofencePendingIntent: PendingIntent by lazy {
        // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling
        // addGeofences() and removeGeofences().
        val flags = PendingIntent.FLAG_UPDATE_CURRENT
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
            // Starting on Android S+ the pending intent has to be mutable.
            flags or PendingIntent.FLAG_MUTABLE
        }
        val intent = Intent(this, GeofenceBroadcastReceiver::class.java)
        PendingIntent.getBroadcast(this, 0, intent, flags)
    }

}

Java

public class MainActivity extends AppCompatActivity {

    // ...

    private PendingIntent getGeofencePendingIntent() {
        // Reuse the PendingIntent if we already have it.
        if (geofencePendingIntent != null) {
          return geofencePendingIntent;
        }
        // We use FLAG_UPDATE_CURRENT so that we get the same pending intent back when calling
        // addGeofences() and removeGeofences().
        int flags = PendingIntent.FLAG_UPDATE_CURRENT;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
            // Starting on Android S+ the pending intent has to be mutable.
            flags |= PendingIntent.FLAG_MUTABLE;
        }
        Intent intent = new Intent(this, GeofenceBroadcastReceiver.class);
        geofencePendingIntent = PendingIntent.getBroadcast(this, 0, intent, flags);
        return geofencePendingIntent;
   }

}

Coğrafi sınırlar ekleme

Coğrafi sınırlar eklemek için GeofencingClient.addGeofences() yöntemini kullanın. GeofencingRequest nesnesini ve PendingIntent değerini girin. Aşağıdaki snippet, sonuçların nasıl işleneceğini gösterir:

Kotlin

geofencingClient?.addGeofences(getGeofencingRequest(), geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences added
        // ...
    }
    addOnFailureListener {
        // Failed to add geofences
        // ...
    }
}

Java

geofencingClient.addGeofences(getGeofencingRequest(), getGeofencePendingIntent())
        .addOnSuccessListener(this, new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // Geofences added
                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Failed to add geofences
                // ...
            }
        });

Coğrafi sınır geçişlerini işleme

Konum Hizmetleri, kullanıcının bir coğrafi sınıra girdiğini veya bu sınırdan çıktığını algıladığında, coğrafi sınırlar ekleme isteğine dahil ettiğiniz PendingIntent içinde yer alan Intent gönderir. GeofenceBroadcastReceiver gibi bir yayın alıcısı, Intent öğesinin çağrıldığını fark eder ve ardından coğrafi sınırlama etkinliğini amaçtan alabilir, coğrafi sınırlama geçişlerinin türünü belirleyebilir ve tanımlanan coğrafi sınırlamalardan hangisinin tetiklendiğini belirleyebilir. Yayın alıcısı, bir uygulamayı arka plan çalışması yapmaya yönlendirebilir veya istenirse çıktı olarak bildirim gönderebilir.

Not: Android 8.0 (API seviyesi 26) ve sonraki sürümlerde, bir uygulama coğrafi sınırı izlerken arka planda çalışıyorsa cihaz, coğrafi sınırlama etkinliklerine birkaç dakikada bir yanıt verir. Uygulamanızı bu yanıt sınırlarına nasıl uyarlayacağınızı öğrenmek için Arka Plan Konum Sınırları başlıklı makaleyi inceleyin.

Aşağıdaki snippet'te, coğrafi sınırlı bölge geçişi gerçekleştiğinde bildirim yayınlayan bir BroadcastReceiver işleminin nasıl tanımlanacağı gösterilmektedir. Kullanıcı bildirimi tıkladığında uygulamanın ana etkinliği görünür:

Kotlin

class GeofenceBroadcastReceiver : BroadcastReceiver() {
    // ...
    override fun onReceive(context: Context?, intent: Intent?) {
        val geofencingEvent = GeofencingEvent.fromIntent(intent)
        if (geofencingEvent.hasError()) {
            val errorMessage = GeofenceStatusCodes
                    .getStatusCodeString(geofencingEvent.errorCode)
            Log.e(TAG, errorMessage)
            return
        }

        // Get the transition type.
        val geofenceTransition = geofencingEvent.geofenceTransition

        // Test that the reported transition was of interest.
        if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
                geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

            // Get the geofences that were triggered. A single event can trigger
            // multiple geofences.
            val triggeringGeofences = geofencingEvent.triggeringGeofences

            // Get the transition details as a String.
            val geofenceTransitionDetails = getGeofenceTransitionDetails(
                    this,
                    geofenceTransition,
                    triggeringGeofences
            )

            // Send notification and log the transition details.
            sendNotification(geofenceTransitionDetails)
            Log.i(TAG, geofenceTransitionDetails)
        } else {
            // Log the error.
            Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
                    geofenceTransition))
        }
    }
}

Java

public class GeofenceBroadcastReceiver extends BroadcastReceiver {
    // ...
    protected void onReceive(Context context, Intent intent) {
        GeofencingEvent geofencingEvent = GeofencingEvent.fromIntent(intent);
        if (geofencingEvent.hasError()) {
            String errorMessage = GeofenceStatusCodes
                    .getStatusCodeString(geofencingEvent.getErrorCode());
            Log.e(TAG, errorMessage);
            return;
        }

        // Get the transition type.
        int geofenceTransition = geofencingEvent.getGeofenceTransition();

        // Test that the reported transition was of interest.
        if (geofenceTransition == Geofence.GEOFENCE_TRANSITION_ENTER ||
                geofenceTransition == Geofence.GEOFENCE_TRANSITION_EXIT) {

            // Get the geofences that were triggered. A single event can trigger
            // multiple geofences.
            List<Geofence> triggeringGeofences = geofencingEvent.getTriggeringGeofences();

            // Get the transition details as a String.
            String geofenceTransitionDetails = getGeofenceTransitionDetails(
                    this,
                    geofenceTransition,
                    triggeringGeofences
            );

            // Send notification and log the transition details.
            sendNotification(geofenceTransitionDetails);
            Log.i(TAG, geofenceTransitionDetails);
        } else {
            // Log the error.
            Log.e(TAG, getString(R.string.geofence_transition_invalid_type,
                    geofenceTransition));
        }
    }
}

Geçiş etkinliği PendingIntent aracılığıyla algılandıktan sonra BroadcastReceiver, coğrafi sınırlı bölge geçiş türünü alır ve uygulamanın bildirimleri tetiklemek için kullandığı etkinliklerden biri olup olmadığını test eder. Bu durumda GEOFENCE_TRANSITION_ENTER veya GEOFENCE_TRANSITION_EXIT. Hizmet daha sonra bir bildirim gönderir ve geçiş ayrıntılarını günlüğe kaydeder.

Coğrafi sınırlı alan izlemeyi durdurma

Artık gerek duyulmadığında veya istenmediğinde coğrafi sınırlı alan izlemeyi durdurmak, cihazda pil gücünden ve CPU döngülerinden tasarruf etmenize yardımcı olabilir. Coğrafi sınırlı alan izlemeyi, coğrafi sınırlı alan eklemek ve kaldırmak için kullanılan ana etkinlikte durdurabilirsiniz. Coğrafi sınırlı alanın kaldırılması, izlemeyi anında durdurur. API, istek kimliklerine göre coğrafi çitleri kaldırma veya belirli bir PendingIntent ile ilişkili coğrafi çitleri kaldırma yöntemleri sunar.

Aşağıdaki snippet, PendingIntent tarafından coğrafi sınırlamaları kaldırarak cihaz daha önce eklenen coğrafi sınırlamalara girdiğinde veya bu sınırlamalardan çıktığında tüm bildirimleri durdurur:

Kotlin

geofencingClient?.removeGeofences(geofencePendingIntent)?.run {
    addOnSuccessListener {
        // Geofences removed
        // ...
    }
    addOnFailureListener {
        // Failed to remove geofences
        // ...
    }
}

Java

geofencingClient.removeGeofences(getGeofencePendingIntent())
        .addOnSuccessListener(this, new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                // Geofences removed
                // ...
            }
        })
        .addOnFailureListener(this, new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Failed to remove geofences
                // ...
            }
        });

Coğrafi sınırlama özelliğini, konumun düzenli olarak güncellenmesi gibi konuma dayalı diğer özelliklerle birlikte kullanabilirsiniz. Daha fazla bilgi için bu sınıftaki diğer derslere göz atın.

Coğrafi sınırlama için en iyi uygulamaları kullanma

Bu bölümde, Android için konum API'leri ile coğrafi sınırlama kullanmayla ilgili öneriler özetlenmektedir.

Güç tüketimini azaltma

Coğrafi sınırlama kullanan uygulamalarınızda güç tüketimini optimize etmek için aşağıdaki teknikleri kullanabilirsiniz:

  • Bildirim yanıt hızını daha yüksek bir değere ayarlayın. Bu işlem, coğrafi sınırlama uyarılarının gecikmesini artırarak güç tüketimini iyileştirir. Örneğin, yanıt verme süresini beş dakika olarak ayarlarsanız uygulamanız giriş veya çıkış uyarısını yalnızca beş dakikada bir kontrol eder. Değerlerin daha düşük ayarlanması, kullanıcıların bu süre içinde bildirim alacağı anlamına gelmez (örneğin, 5 saniye olarak ayarlarsanız uyarıyı almak biraz daha uzun sürebilir).

  • Kullanıcının önemli miktarda zaman geçirdiği yerler (ör. ev veya iş yeri) için daha büyük bir coğrafi sınırlama yarıçapı kullanın. Daha geniş bir yarıçap, güç tüketimini doğrudan azaltmasa da uygulamanın giriş veya çıkış kontrolü yapma sıklığını azaltarak genel güç tüketimini düşürür.

Coğrafi sınırınız için optimum yarıçapı seçme

En iyi sonuçlar için coğrafi sınırlı alanın minimum yarıçapı 100-150 metre arasında ayarlanmalıdır. Kablosuz bağlantı olduğunda konum doğruluğu genellikle 20-50 metre arasındadır. Kapalı alan konumu kullanılabildiğinde doğruluk aralığı 5 metre kadar küçük olabilir. Coğrafi sınırlı alan içinde kapalı alan konumunun kullanılabildiğini bilmiyorsanız kablosuz konum doğruluğunun yaklaşık 50 metre olduğunu varsayın.

Kablosuz ağ konumu kullanılamadığında (ör. kırsal alanlarda araç kullanırken) konum doğruluğu düşer. Doğruluk aralığı birkaç yüz metreden birkaç kilometreye kadar değişebilir. Bu gibi durumlarda, daha büyük bir yarıçap kullanarak coğrafi sınırlar oluşturmanız gerekir.

Uygulamanızın coğrafi sınırlama özelliğini neden kullandığını kullanıcılara açıklayın.

Uygulamanız, coğrafi sınırlama kullanırken arka planda konuma eriştiği için kullanıcılara nasıl avantajlar sağladığını göz önünde bulundurun. Kullanıcıların anlayışını ve şeffaflığı artırmak için uygulamanızın bu erişime neden ihtiyaç duyduğunu onlara net bir şekilde açıklayın.

Coğrafi sınırlama da dahil olmak üzere konum erişimiyle ilgili en iyi uygulamalar hakkında daha fazla bilgi için gizlilikle ilgili en iyi uygulamalar sayfasına bakın.

Uyarı spam'ini azaltmak için bekleme geçişi türünü kullanma

Kısa süre içinde bir coğrafi sınırdan geçerken çok sayıda uyarı alıyorsanız uyarı sayısını azaltmanın en iyi yolu GEOFENCE_TRANSITION_ENTER yerine GEOFENCE_TRANSITION_DWELL geçiş türünü kullanmaktır. Bu şekilde, konaklama uyarısı yalnızca kullanıcı belirli bir süre boyunca coğrafi sınırlı alan içinde durduğunda gönderilir. Oyalanma gecikmesi ayarlayarak süreyi seçebilirsiniz.

Coğrafi sınırlara yalnızca gerektiğinde yeniden kaydolun

Kayıtlı coğrafi sınırlar, com.google.process.location paketi tarafından sahip olunan com.google.android.gms sürecinde tutulur. Sistem, aşağıdaki etkinliklerden sonra coğrafi sınırları geri yüklediği için uygulamanın bu etkinlikleri işlemek için herhangi bir işlem yapması gerekmez:

  • Google Play Hizmetleri yükseltilir.
  • Google Play Hizmetleri, kaynak kısıtlaması nedeniyle sistem tarafından sonlandırılıp yeniden başlatılıyor.
  • Konum işlemi kilitleniyor.

Sistem aşağıdaki durumlarda coğrafi sınırlara geri dönemediğinden, aşağıdaki olaylardan sonra hâlâ gerekliyse uygulamanın coğrafi sınırları yeniden kaydetmesi gerekir:

  • Cihaz yeniden başlatılır. Uygulama, cihazın başlatma işleminin tamamlanmasını beklemeli ve ardından gerekli coğrafi sınırlara yeniden kaydolmalıdır.
  • Uygulama kaldırılıp yeniden yüklenir.
  • Uygulamanın verileri temizlenir.
  • Google Play Hizmetleri verileri temizlenir.
  • Uygulama GEOFENCE_NOT_AVAILABLE uyarısı aldı. Bu durum genellikle NLP (Android'in Ağ Konum Sağlayıcısı) devre dışı bırakıldıktan sonra gerçekleşir.

Coğrafi sınır giriş etkinliğiyle ilgili sorunları giderme

Cihaz bir coğrafi sınıra girdiğinde coğrafi sınırlar tetiklenmiyorsa ( GEOFENCE_TRANSITION_ENTER uyarısı tetiklenmiyorsa) öncelikle bu rehberde açıklandığı gibi coğrafi sınırlarınızın düzgün şekilde kaydedildiğinden emin olun.

Uyarıların beklendiği gibi çalışmamasının olası nedenlerinden bazıları şunlardır:

  • Çit alanınızın içinde doğru konum kullanılamıyor veya çit alanınız çok küçük. Çoğu cihazda, coğrafi sınırlama hizmeti coğrafi sınırlama tetikleme için yalnızca ağ konumunu kullanır. Bu yaklaşım, ağ konumunun çok daha az güç tüketmesi, ayrı konumların alınmasının daha kısa sürmesi ve en önemlisi kapalı alanlarda kullanılabilmesi nedeniyle tercih edilir.
  • Cihazda kablosuz bağlantı kapalıdır. Kablosuz bağlantının açık olması konum doğruluğunu önemli ölçüde artırabilir. Bu nedenle, kablosuz bağlantı kapalıysa uygulamanız, coğrafi sınırlama yarıçapı, cihaz modeli veya Android sürümü gibi çeşitli ayarlara bağlı olarak coğrafi sınırlama uyarıları almayabilir. Android 4.3'ten (API düzeyi 18) itibaren, kullanıcıların kablosuz ağı devre dışı bırakmasına rağmen iyi bir ağ konumu elde etmesini sağlayan "yalnızca kablosuz ağ tarama modu" özelliğini ekledik. Her ikisi de devre dışıysa kullanıcıya istem göstermek ve yalnızca kablosuz veya kablosuz tarama modunu etkinleştirmesi için kısayol sağlamak iyi bir uygulamadır. Cihazın sistem ayarlarının optimum konum algılama için düzgün şekilde yapılandırıldığından emin olmak üzere SettingsClient'ı kullanın.

    Not: Uygulamanız Android 10'u (API düzeyi 29) veya daha yüksek bir sürümü hedefliyorsa uygulamanız bir sistem uygulaması ya da cihaz politikası denetleyicisi (DPC) olmadığı sürece WifiManager.setEnabled() doğrudan çağrılamaz. Bunun yerine ayarlar panelini kullanın.

  • Coğrafi sınırlı alanınızda güvenilir bir ağ bağlantısı yoksa Güvenilir bir veri bağlantısı yoksa uyarılar oluşturulmayabilir. Bunun nedeni, coğrafi sınırlama hizmetinin ağ konumu sağlayıcısına bağlı olması ve ağ konumu sağlayıcısının da veri bağlantısı gerektirmesidir.
  • Uyarılar gecikebilir. Coğrafi sınırlama hizmeti, konum için sürekli olarak sorgu yapmaz. Bu nedenle, uyarı alırken bir miktar gecikme yaşanabilir. Gecikme genellikle 2 dakikadan kısadır. Cihaz hareket halindeyken bu süre daha da kısalır. Arka Plan Konum Limitleri etkinse gecikme süresi ortalama 2-3 dakikadır. Cihaz önemli bir süre boyunca hareketsiz kaldıysa gecikme süresi artabilir (6 dakikaya kadar).

Ek kaynaklar

Coğrafi sınırlama hakkında daha fazla bilgi edinmek için aşağıdaki materyallere göz atın:

Örnekler

Coğrafi sınırlar oluşturmak ve izlemek için örnek uygulama.