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

Uygulamanızı, kullanıcının ne zaman çalışmaya başladığını veya durduğunu tanımlayacak şekilde tasarlamanız gerekebilir. Yürüyüş, bisiklet veya araba kullanma gibi belirli bir aktivite. Örneğin, kilometre izleme uygulaması, bir kullanıcı araba kullanmaya başladığında mil izlemeye başlayabilir veya Mesajlaşma uygulaması, kullanıcı sürüşü durdurana kadar tüm görüşmelerin sesini kapatabilir.

Activity Recognition Transition API, yapılandırma verilerini içeren kullanıcı etkinliği. Uygulamanız, ilgilendiğiniz etkinliklerdeki geçişe abone oluyor Ayrıca API, uygulamanızı yalnızca gerektiğinde bilgilendirir. Bu sayfada, Activity Recognition Transition API, kısaca Transition API olarak da adlandırılır.

Projenizi oluşturun

Uygulamanızda Transition API'yi kullanmak için Google Location and Activity Recognition API'si 12.0.0 veya sonraki bir sürüm ve com.google.android.gms.permission.ACTIVITY_RECOGNITION iznini belirtin inceleyebilirsiniz.

  1. API'ye bağımlılık bildirmek için Google maven uygulamasına referans ekleyin depolayıp tabloya bir uygulama girişi Bağımlılıklara com.google.android.gms:play-services-location:12.0.0 etkisi uygulama build.gradle bölümüne ekleyin. Daha fazla bilgi için bkz. Kurulum Google Play Hizmetleri.
  2. com.google.android.gms.permission.ACTIVITY_RECOGNITION özelliğini belirtmek için bir <uses-permission> öğesini aşağıda gösterildiği gibi uygulama manifest'inde bulabilirsiniz:

     <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 şu:

To ActivityTransitionRequest her nesne için bir liste oluşturmanız gerekir: ActivityTransition bildirim almak istediğiniz geçişi temsil eden nesneler konu. 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());

Web sitemiz g.co/newsinitiative/labs üzerinden ActivityTransitionRequest nesnesini oluşturmak için ActivityTransitions listesini ActivityTransitionRequest sınıfı, aşağıdaki örnekte gösterildiği gibi:

Kotlin

val request = ActivityTransitionRequest(transitions)

Java

ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);

Şu örneğinizi ileterek etkinlik geçişi güncellemelerine kaydolabilirsiniz: ActivityTransitionRequest ve PendingIntent nesneniz requestActivityTransitionUpdates() yöntemidir. requestActivityTransitionUpdates() yöntemi, Task aşağıdaki kodda gösterildiği gibi başarılı veya başarısız olup olmadığını kontrol edebileceğiniz nesne örnek:

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ı olan PendingIntent içinde bildirim alır.

İşlem etkinliği geçiş etkinliklerini

İstenen etkinlik geçişi gerçekleştiğinde uygulamanız Intent geri çağırması alır. ActivityTransitionResult nesne, Intent öğesinden çıkarılabilir. Bu örnek, ActivityTransitionEvent nesneler'i tıklayın. Etkinlikler kronolojik olarak sıralanır (ör. bir uygulama şunun için talep ediliyor: IN_VEHICLE etkinlik türü ACTIVITY_TRANSITION_ENTER ve ACTIVITY_TRANSITION_EXIT kullanıcı geçişten sonra bir ActivityTransitionEvent nesnesi alır kullanıcı başka bir etkinliğe geçtiğinde başlıyor.

Bir BroadcastReceiver alt sınıfı oluşturarak ve listeyi almak için onReceive() yöntemini uygulayarak geri çağırma işleminizi uygulayabilirsiniz. dönüşüm etkinlikleri anlamına gelir. Daha fazla bilgi için bkz. Yayınlar. Aşağıdaki örnekte, onReceive() yöntemini uygulamak için:

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üncellemelerinin kaydını silin

Etkinlik geçişi güncellemelerinin kaydını iptal etmek için removeActivityTransitionUpdates() yöntemindeki ActivityRecognitionClient ve PendingIntent nesnenizi parametre olarak iletmek için aşağıdaki örnekte gösterilmektedir:

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ğıdakileri görüntüleyin materyaller:

Örnekler

Kullanıcı etkinliğini tanımayla ilgili en iyi uygulamaları gösteren örnek.