Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mendeteksi kapan pengguna memulai atau mengakhiri aktivitas

Anda mungkin perlu mendesain aplikasi agar mengidentifikasi kapan pengguna memulai atau berhenti melakukan aktivitas tertentu, seperti berjalan, bersepeda, atau mengemudi. Misalnya, aplikasi pelacak jarak tempuh dapat mulai melacak mil saat pengguna mulai mengemudi, atau aplikasi pesan dapat membisukan semua percakapan sampai pengguna berhenti mengemudi.

Activity Recognition Transition API dapat digunakan untuk mendeteksi perubahan pada aktivitas pengguna. Aplikasi Anda berlangganan ke transisi dalam aktivitas yang diminati dan API akan memberi tahu aplikasi Anda hanya saat dibutuhkan. Halaman ini menunjukkan cara menggunakan Activity Recognition Transition API, yang lebih singkatnya disebut dengan Transition API.

Menyiapkan project

Untuk menggunakan Transition API di aplikasi, Anda harus mendeklarasikan dependensi ke Google Location and Activity Recognition API versi 12.0.0 atau yang lebih baru dan menetapkan izin com.google.android.gms.permission.ACTIVITY_RECOGNITION di manifes aplikasi.

  1. Untuk mendeklarasikan dependensi ke API tersebut, tambahkan referensi ke repositori Google maven dan tambahkan entri implementasi ke com.google.android.gms:play-services-location:12.0.0 ke bagian dependensi file build.gradle aplikasi Anda. Untuk informasi selengkapnya, lihat Menyiapkan Layanan Google Play.
  2. Untuk menetapkan izin com.google.android.gms.permission.ACTIVITY_RECOGNITION, tambahkan elemen <uses-permission> di manifes aplikasi, seperti yang ditunjukkan di contoh berikut:

     <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>
    

Mendaftar ke pembaruan transisi aktivitas

Untuk mulai menerima notifikasi terkait transisi aktivitas, Anda harus mengimplementasikan hal berikut ini:

Untuk membuat objek ActivityTransitionRequest, Anda harus membuat daftar objek ActivityTransition, yang mewakili transisi yang ingin Anda terima notifikasinya. Objek ActivityTransition mencakup data berikut:

Kode berikut menunjukkan cara membuat daftar objek ActivityTransition:

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());

Anda dapat membuat objek ActivityTransitionRequest dengan meneruskan daftar ActivityTransitions ke class ActivityTransitionRequest, seperti yang ditunjukkan di contoh berikut:

Kotlin

val request = ActivityTransitionRequest(transitions)

Java

ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);

Anda dapat mendaftar untuk pembaruan transisi aktivitas dengan meneruskan instance ActivityTransitionRequest dan objek PendingIntent ke metode requestActivityTransitionUpdates(). Metode requestActivityTransitionUpdates() menampilkan objek Task yang dapat Anda periksa kesuksesan atau kegagalannya, seperti yang ditunjukkan di contoh kode berikut:

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
        }
    }
);

Setelah berhasil mendaftar untuk pembaruan transisi aktivitas, aplikasi Anda menerima notifikasi di PendingIntent yang terdaftar.

Memproses peristiwa transisi aktivitas

Saat transisi aktivitas yang diminta terjadi, aplikasi Anda akan menerima callback Intent. Objek ActivityTransitionResult dapat diekstrak dari Intent, yang mencakup daftar objek ActivityTransitionEvent. Peristiwa diurutkan secara kronologis, misalnya, jika aplikasi meminta jenis aktivitas IN_VEHICLE di transisi ACTIVITY_TRANSITION_ENTER dan ACTIVITY_TRANSITION_EXIT, maka aplikasi menerima objek ActivityTransitionEvent saat pengguna mulai mengemudi, dan menerima objek lain lagi saat pengguna bertransisi ke aktivitas lainnya.

Anda dapat mengimplementasikan callback dengan membuat subclass BroadcastReceiver dan mengimplementasikan metode onReceive() untuk mendapatkan daftar peristiwa transisi aktivitas. Untuk informasi selengkapnya, lihat Siaran. Contoh berikut menunjukkan cara mengimplementasikan metode onReceive():

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....
        }
    }
}

Membatalkan pendaftaran pembaruan transisi aktivitas

Anda dapat membatalkan pendaftaran pembaruan transisi aktivitas dengan memanggil metode removeActivityTransitionUpdates() dari ActivityRecognitionClient dan meneruskan objek PendingIntent Anda sebagai parameter, seperti yang ditunjukkan di contoh berikut:

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());
        }
    }
);