ตรวจจับเวลาที่ผู้ใช้เริ่มหรือสิ้นสุดกิจกรรม

คุณอาจต้องออกแบบแอปให้ระบุช่วงเวลาที่ผู้ใช้เริ่มหรือหยุด กิจกรรมบางอย่าง เช่น การเดิน การขี่จักรยาน หรือการขับรถ ตัวอย่างเช่น แอปติดตามระยะทางอาจเริ่มติดตามไมล์เมื่อผู้ใช้เริ่มขับรถ หรือ แอปรับส่งข้อความอาจปิดเสียงการสนทนาทั้งหมดจนกว่าผู้ใช้จะหยุดขับรถ

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 ของแอป

  1. หากต้องการประกาศการพึ่งพา API ให้เพิ่มการอ้างอิงไปยัง Google Maven ที่เก็บ และเพิ่มรายการการใช้งาน com.google.android.gms:play-services-location:12.0.0 ไปยังทรัพยากร Dependency ของไฟล์ build.gradle ของแอป ดูข้อมูลเพิ่มเติมได้ที่ตั้งค่า บริการ Google Play
  2. หากต้องการระบุ 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 มีข้อมูลต่อไปนี้

โค้ดต่อไปนี้แสดงวิธีสร้างรายการออบเจ็กต์ 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 การจดจำกิจกรรมของผู้ใช้ โปรดดูข้อมูลต่อไปนี้ วัสดุ:

ตัวอย่าง

ตัวอย่าง เพื่อแสดงแนวทางปฏิบัติแนะนำสำหรับการจดจำกิจกรรมของผู้ใช้