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.
- 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 filebuild.gradle
aplikasi Anda. Untuk informasi selengkapnya, lihat Menyiapkan Layanan Google Play. 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:
- Objek
ActivityTransitionRequest
yang menetapkan jenis aktivitas dan transisi. - Callback
PendingIntent
tempat aplikasi Anda menerima notifikasi. Untuk informasi selengkapnya, buka Menggunakan intent tertunda.
Untuk membuat objek ActivityTransitionRequest
, Anda harus membuat daftar objek ActivityTransition
, yang mewakili transisi yang ingin Anda terima notifikasinya. Objek ActivityTransition
mencakup data berikut:
- Jenis aktivitas, diwakili oleh class
DetectedActivity
. Transition API mendukung aktivitas berikut: - Jenis transisi
ACTIVITY_TRANSITION_ENTER
atauACTIVITY_TRANSITION_EXIT
. Untuk informasi selengkapnya, lihat classActivityTransition
.
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()); } } );
Referensi lainnya
Untuk mempelajari penggunaan API pengenalan aktivitas pengguna lebih lanjut, lihat materi berikut:
Contoh
Contoh untuk mendemonstrasikan praktik terbaik terkait pengenalan aktivitas pengguna.