คุณอาจต้องออกแบบแอปให้ระบุช่วงเวลาที่ผู้ใช้เริ่มหรือหยุด กิจกรรมบางอย่าง เช่น การเดิน การขี่จักรยาน หรือการขับรถ ตัวอย่างเช่น แอปติดตามระยะทางอาจเริ่มติดตามไมล์เมื่อผู้ใช้เริ่มขับรถ หรือ แอปรับส่งข้อความอาจปิดเสียงการสนทนาทั้งหมดจนกว่าผู้ใช้จะหยุดขับรถ
API การเปลี่ยนการจดจำกิจกรรมสามารถใช้เพื่อตรวจหาการเปลี่ยนแปลงใน กิจกรรมของผู้ใช้ แอปของคุณสมัครใช้บริการการเปลี่ยนแปลงกิจกรรมที่สนใจ และ API จะแจ้งเตือนแอปของคุณเมื่อจำเป็นเท่านั้น หน้านี้จะแสดงวิธีใช้ Activity Recognition Transition API หรือที่เรียกสั้นๆ ว่า Transition API
ตั้งค่าโปรเจ็กต์
หากต้องการใช้ Transition API ในแอป คุณต้องประกาศทรัพยากร Dependency ของ
Google Location and Activity Recognition API เวอร์ชัน 12.0.0 ขึ้นไปและ
ระบุสิทธิ์ com.google.android.gms.permission.ACTIVITY_RECOGNITION
ในไฟล์ Manifest ของแอป
- หากต้องการประกาศการพึ่งพา API ให้เพิ่มการอ้างอิงไปยัง Google Maven
ที่เก็บ และเพิ่มรายการการใช้งาน
com.google.android.gms:play-services-location:12.0.0
ไปยังทรัพยากร Dependency ของไฟล์build.gradle
ของแอป ดูข้อมูลเพิ่มเติมได้ที่ตั้งค่า บริการ Google Play หากต้องการระบุ
com.google.android.gms.permission.ACTIVITY_RECOGNITION
สิทธิ์ ให้เพิ่ม<uses-permission>
ในไฟล์ Manifest ของแอปดังที่แสดงในตัวอย่างต่อไปนี้<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>
ลงทะเบียนเพื่อรับการอัปเดตการเปลี่ยนแปลงกิจกรรม
หากต้องการเริ่มรับการแจ้งเตือนเกี่ยวกับการเปลี่ยนแปลงกิจกรรม คุณต้องดําเนินการ ดังต่อไปนี้
- CANNOT TRANSLATE
ActivityTransitionRequest
ที่ระบุประเภทของกิจกรรมและการเปลี่ยน - การติดต่อกลับ
PendingIntent
ที่แอปของคุณได้รับ การแจ้งเตือน สำหรับข้อมูลเพิ่มเติม ดูที่การใช้ Intent
วิธีสร้าง
ActivityTransitionRequest
คุณต้องสร้างรายการ
ActivityTransition
ซึ่งแสดงการเปลี่ยนที่คุณต้องการรับการแจ้งเตือน
ประมาณ CANNOT TRANSLATE
ActivityTransition
มีข้อมูลต่อไปนี้
- ประเภทกิจกรรมที่แสดงโดย
DetectedActivity
Transition API รองรับกิจกรรมต่อไปนี้ - ประเภทการเปลี่ยน
ACTIVITY_TRANSITION_ENTER
หรือACTIVITY_TRANSITION_EXIT
ดูข้อมูลเพิ่มเติมได้ที่ActivityTransition
โค้ดต่อไปนี้แสดงวิธีสร้างรายการออบเจ็กต์ 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());
คุณสามารถสร้าง
ActivityTransitionRequest
โดยการส่งรายการ ActivityTransitions
ไปยัง
ActivityTransitionRequest
ดังที่แสดงในตัวอย่างต่อไปนี้
Kotlin
val request = ActivityTransitionRequest(transitions)
Java
ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);
คุณสามารถลงทะเบียนสำหรับการอัปเดตการเปลี่ยนแปลงกิจกรรมโดยการส่งอินสแตนซ์
ActivityTransitionRequest
และออบเจ็กต์ PendingIntent
ของคุณลงใน
requestActivityTransitionUpdates()
เมธอด requestActivityTransitionUpdates()
แสดงผล
Task
ที่คุณสามารถตรวจสอบความสำเร็จหรือความล้มเหลว ดังที่ปรากฏในโค้ดต่อไปนี้
ตัวอย่าง:
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 } } );
หลังจากลงทะเบียนสำหรับการอัปเดตการเปลี่ยนแปลงกิจกรรมเรียบร้อยแล้ว แอปของคุณ
จะได้รับการแจ้งเตือนในPendingIntent
ที่ลงทะเบียน
ประมวลผลเหตุการณ์การเปลี่ยนแปลงกิจกรรม
เมื่อมีการเปลี่ยนกิจกรรมที่ขอ แอปจะได้รับสายติดต่อกลับ Intent
CANNOT TRANSLATE
ActivityTransitionResult
สามารถดึงออบเจ็กต์จาก Intent
ได้ ซึ่งมีรายการ
ActivityTransitionEvent
ออบเจ็กต์ เหตุการณ์จะเรียงตามลำดับเวลา เช่น หากแอปใดแอปหนึ่ง
คำขอสำหรับ
IN_VEHICLE
ประเภทกิจกรรมใน
ACTIVITY_TRANSITION_ENTER
และ
ACTIVITY_TRANSITION_EXIT
เปลี่ยน จากนั้นจะได้รับออบเจ็กต์ ActivityTransitionEvent
ด้วย เมื่อผู้ใช้
เริ่มขับรถ และอีกเส้นทางเมื่อผู้ใช้เปลี่ยนไปทำกิจกรรมอื่น
คุณใช้ Callback ได้โดยสร้างคลาสย่อยของ BroadcastReceiver
และใช้เมธอด onReceive()
เพื่อรับรายการ
ของเหตุการณ์การเปลี่ยน สำหรับข้อมูลเพิ่มเติม โปรดดู
ประกาศ ตัวอย่างต่อไปนี้จะแสดงวิธีการ
เพื่อใช้เมธอด 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.... } } }
ยกเลิกการลงทะเบียนเพื่ออัปเดตการเปลี่ยนแปลงกิจกรรม
คุณสามารถยกเลิกการลงทะเบียนรับการอัปเดตการเปลี่ยนแปลงกิจกรรมโดยการเรียกใช้
removeActivityTransitionUpdates()
ของวิธีการ
ActivityRecognitionClient
และส่งออบเจ็กต์ PendingIntent
ของคุณเป็นพารามิเตอร์ เช่น
ที่แสดงในตัวอย่างต่อไปนี้
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()); } } );
แหล่งข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ API การจดจำกิจกรรมของผู้ใช้ โปรดดูข้อมูลต่อไปนี้ วัสดุ:
ตัวอย่าง
ตัวอย่าง เพื่อแสดงแนวทางปฏิบัติแนะนำสำหรับการจดจำกิจกรรมของผู้ใช้