Uygulamanızı, kullanıcının yürüme, bisiklete binme veya araba kullanma gibi belirli bir aktiviteye ne zaman başladığını ya da durdurduğunu tanımlayacak şekilde tasarlamanız gerekebilir. Örneğin, bir kilometre takip uygulaması, kullanıcı araba sürmeye başladığında kilometreleri takip etmeye başlayabilir veya bir mesajlaşma uygulaması, kullanıcı araba sürmeyi durdurana kadar tüm görüşmeleri sessize alabilir.
Activity Recognition Transition API, kullanıcının etkinliğindeki değişiklikleri algılamak için kullanılabilir. Uygulamanız, ilgilendiğiniz etkinliklerde bir geçişe abone olur ve API, uygulamanıza yalnızca gerektiğinde bildirim gönderir. Bu sayfada, kısaca Transition API olarak da adlandırılan Activity Recognition Transition API'nin nasıl kullanılacağı gösterilmektedir.
Projenizi oluşturun
Transition API'yi uygulamanızda kullanmak için Google Location and Activity Recognition API'si 12.0.0 veya üzeri bir sürüme bağımlılık bildirmeniz ve uygulama manifest dosyasında com.google.android.gms.permission.ACTIVITY_RECOGNITION
iznini belirtmeniz gerekir.
- API'ye bağımlılık bildirmek için Google maven deposuna referans ve
com.google.android.gms:play-services-location:12.0.0
için uygulamanızınbuild.gradle
dosyasının bağımlılıklar bölümüne bir uygulama girişi ekleyin. Daha fazla bilgi için Google Play Hizmetleri'ni kurma konusuna bakın. com.google.android.gms.permission.ACTIVITY_RECOGNITION
iznini belirtmek için aşağıdaki örnekte gösterildiği gibi uygulama manifest dosyasına bir<uses-permission>
öğesi ekleyin:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /> … </manifest>
Etkinlik geçişi güncellemelerine kaydolun
Etkinlik geçişleriyle ilgili bildirim almaya başlamak için aşağıdakileri uygulamanız gerekir:
- Etkinlik ve geçişin türünü belirten bir
ActivityTransitionRequest
nesnesi. - Uygulamanızın bildirim aldığı bir
PendingIntent
geri araması. Daha fazla bilgi için Beklemedeki bir amacı kullanma bölümüne bakın.
ActivityTransitionRequest
nesnesini oluşturmak için hakkında bildirim almak istediğiniz geçişi temsil eden ActivityTransition
nesnelerinin bir listesini oluşturmanız gerekir. ActivityTransition
nesnesi aşağıdaki verileri içerir:
DetectedActivity
sınıfıyla temsil edilen bir etkinlik türü. Transition API aşağıdaki etkinlikleri destekler:ACTIVITY_TRANSITION_ENTER
veyaACTIVITY_TRANSITION_EXIT
geçiş türü. Daha fazla bilgi içinActivityTransition
sınıfına bakın.
Aşağıdaki kodda ActivityTransition
nesnelerinden oluşan bir listenin nasıl oluşturulacağı gösterilmektedir:
Kotlin
val transitions = mutableListOf<ActivityTransition>() transitions += ActivityTransition.Builder() .setActivityType(DetectedActivity.IN_VEHICLE) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER) .build() transitions += ActivityTransition.Builder() .setActivityType(DetectedActivity.IN_VEHICLE) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT) .build() transitions += ActivityTransition.Builder() .setActivityType(DetectedActivity.WALKING) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT) .build()
Java
List<ActivityTransition> transitions = new ArrayList<>(); transitions.add( new ActivityTransition.Builder() .setActivityType(DetectedActivity.IN_VEHICLE) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER) .build()); transitions.add( new ActivityTransition.Builder() .setActivityType(DetectedActivity.IN_VEHICLE) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT) .build()); transitions.add( new ActivityTransition.Builder() .setActivityType(DetectedActivity.WALKING) .setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT) .build());
Aşağıdaki örnekte gösterildiği gibi, ActivityTransitions
listesini ActivityTransitionRequest
sınıfına ileterek bir ActivityTransitionRequest
nesnesi oluşturabilirsiniz:
Kotlin
val request = ActivityTransitionRequest(transitions)
Java
ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);
ActivityTransitionRequest
örneğinizi ve PendingIntent
nesnenizi requestActivityTransitionUpdates()
yöntemine geçirerek etkinlik geçişi güncellemelerine kaydolabilirsiniz. requestActivityTransitionUpdates()
yöntemi, aşağıdaki kod örneğinde gösterildiği gibi, başarılı olup olmadığını kontrol edebileceğiniz bir Task
nesnesi döndürür:
Kotlin
// myPendingIntent is the instance of PendingIntent where the app receives callbacks. val task = ActivityRecognition.getClient(context) .requestActivityTransitionUpdates(request, myPendingIntent) task.addOnSuccessListener { // Handle success } task.addOnFailureListener { e: Exception -> // Handle error }
Java
// myPendingIntent is the instance of PendingIntent where the app receives callbacks. Task<Void> task = ActivityRecognition.getClient(context) .requestActivityTransitionUpdates(request, myPendingIntent); task.addOnSuccessListener( new OnSuccessListener<Void>() { @Override public void onSuccess(Void result) { // Handle success } } ); task.addOnFailureListener( new OnFailureListener() { @Override public void onFailure(Exception e) { // Handle error } } );
Etkinlik geçişi güncellemelerine başarıyla kaydolduktan sonra uygulamanız kayıtlı PendingIntent
içinde bildirim alır.
Etkinlik geçiş etkinliklerini işleme
İstenen etkinlik geçişi gerçekleştiğinde uygulamanız bir Intent
geri çağırması alır. Bir ActivityTransitionResult
nesnesi, ActivityTransitionEvent
nesne listesini içeren Intent
öğesinden çıkarılabilir. Etkinlikler kronolojik sırada sıralanır. Örneğin, bir uygulama ACTIVITY_TRANSITION_ENTER
ve ACTIVITY_TRANSITION_EXIT
geçişlerinde IN_VEHICLE
etkinlik türünü istiyorsa kullanıcı sürüşe başladığında bir ActivityTransitionEvent
nesnesi, kullanıcı başka bir etkinliğe geçtiğinde de başka bir nesne alır.
Etkinlik geçişi etkinliklerinin listesini almak için bir BroadcastReceiver
alt sınıfı oluşturarak ve onReceive()
yöntemini uygulayarak geri çağırmanızı uygulayabilirsiniz. Daha fazla bilgi için Yayınlar konusuna bakın. Aşağıdaki örnekte onReceive()
yönteminin nasıl uygulanacağı gösterilmektedir:
Kotlin
override fun onReceive(context: Context, intent: Intent) { if (ActivityTransitionResult.hasResult(intent)) { val result = ActivityTransitionResult.extractResult(intent)!! for (event in result.transitionEvents) { // chronological sequence of events.... } } }
Java
@Override public void onReceive(Context context, Intent intent) { if (ActivityTransitionResult.hasResult(intent)) { ActivityTransitionResult result = ActivityTransitionResult.extractResult(intent); for (ActivityTransitionEvent event : result.getTransitionEvents()) { // chronological sequence of events.... } } }
Etkinlik geçişi güncellemeleri için kaydı iptal et
Aşağıdaki örnekte gösterildiği gibi, ActivityRecognitionClient
için removeActivityTransitionUpdates()
yöntemini çağırıp PendingIntent
nesnenizi parametre olarak ileterek etkinlik geçişi güncellemelerinin kaydını iptal edebilirsiniz:
Kotlin
// myPendingIntent is the instance of PendingIntent where the app receives callbacks. val task = ActivityRecognition.getClient(context) .removeActivityTransitionUpdates(myPendingIntent) task.addOnSuccessListener { myPendingIntent.cancel() } task.addOnFailureListener { e: Exception -> Log.e("MYCOMPONENT", e.message) }
Java
// myPendingIntent is the instance of PendingIntent where the app receives callbacks. Task<Void> task = ActivityRecognition.getClient(context) .removeActivityTransitionUpdates(myPendingIntent); task.addOnSuccessListener( new OnSuccessListener<Void>() { @Override public void onSuccess(Void result) { myPendingIntent.cancel(); } } ); task.addOnFailureListener( new OnFailureListener() { @Override public void onFailure(Exception e) { Log.e("MYCOMPONENT", e.getMessage()); } } );
Ek kaynaklar
Kullanıcı etkinliği tanıma API'si kullanımı hakkında daha fazla bilgi edinmek için aşağıdaki malzemeleri görüntüleyin:
Sana Özel
Kullanıcı etkinliği tanımayla ilgili en iyi uygulamaları gösteren örnek.