Kullanıcıların bir etkinliği ne zaman başlattığını veya sonlandırdığını algılama

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.

  1. 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ın build.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.
  2. 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:

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:

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.