شناسایی زمانی که کاربران یک فعالیت را شروع یا پایان می دهند

ممکن است لازم باشد برنامه خود را طوری طراحی کنید که مشخص کند چه زمانی کاربر یک فعالیت خاص مانند پیاده روی، دوچرخه سواری یا رانندگی را شروع می کند یا متوقف می کند. به عنوان مثال، یک برنامه ردیابی مسافت پیموده شده می تواند هنگامی که کاربر شروع به رانندگی می کند، مایل ها را ردیابی کند، یا یک برنامه پیام رسانی می تواند تمام مکالمات را تا زمانی که کاربر رانندگی را متوقف کند، بی صدا کند.

Activity Recognition Transition API می تواند برای تشخیص تغییرات در فعالیت کاربر استفاده شود. برنامه شما مشترک یک انتقال در فعالیت های مورد علاقه می شود و API فقط در صورت نیاز به برنامه شما اطلاع می دهد. این صفحه نحوه استفاده از Activity Recognition Transition API را نشان می دهد که به اختصار Transition API نیز نامیده می شود.

پروژه خود را تنظیم کنید

برای استفاده از Transition API در برنامه خود، باید وابستگی به API مکان Google و Activity Recognition نسخه 12.0.0 یا بالاتر اعلام کنید و مجوز com.google.android.gms.permission.ACTIVITY_RECOGNITION را در مانیفست برنامه مشخص کنید.

  1. برای اعلام وابستگی به API، یک مرجع به مخزن Google maven اضافه کنید و یک ��رودی پیاده سازی به com.google.android.gms:play-services-location:12.0.0 به بخش وابستگی ها در فایل build.gradle برنامه خود اضافه کنید. . برای اطلاعات بیشتر، به تنظیم خدمات Google Play مراجعه کنید.
  2. برای تعیین مجوز com.google.android.gms.permission.ACTIVITY_RECOGNITION ، یک عنصر <uses-permission> را در مانیفست برنامه اضافه کنید، همانطور که در مثال زیر نشان داده شده است:

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

برای به‌روزرسانی‌های انتقال فعالیت ثبت‌نام کنید

برای شروع دریافت اعلان‌های مربوط به انتقال فعالیت، باید موارد زیر را اجرا کنید:

برای ایجاد شی ActivityTransitionRequest ، باید لیستی از اشیاء ActivityTransition ایجاد کنید که نشان دهنده انتقالی است که می خواهید اعلان های مربوط به آن را دریافت کنید. یک شی ActivityTransition شامل داده های زیر است:

کد زیر نحوه ایجاد لیستی از اشیاء ActivityTransition را نشان می دهد:

کاتلین

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

جاوا

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 ایجاد کنید:

کاتلین

val request = ActivityTransitionRequest(transitions)

جاوا

ActivityTransitionRequest request = new ActivityTransitionRequest(transitions);

می‌توانید با ارسال نمونه ActivityTransitionRequest و آبجکت PendingIntent به متد requestActivityTransitionUpdates() برای به‌روزرسانی‌های انتقال فعالیت ثبت نام کنید. متد requestActivityTransitionUpdates() یک شی Task را برمی گرداند که می توانید موفقیت یا شکست آن را بررسی کنید، همانطور که در مثال کد زیر نشان داده شده است:

کاتلین

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

جاوا

// 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 دریافت می کند. یک شی ActivityTransitionResult را می توان از Intent استخراج کرد که شامل لیستی از اشیاء ActivityTransitionEvent است. رویدادها به ترتیب زمانی مرتب می‌شوند، برای مثال، اگر برنامه‌ای برای نوع فعالیت IN_VEHICLE در انتقال‌های ACTIVITY_TRANSITION_ENTER و ACTIVITY_TRANSITION_EXIT درخواست کند، وقتی کاربر شروع به رانندگی می‌کند، یک شی ActivityTransitionEvent دریافت می‌کند، و زمانی که کاربر به فعالیت دیگری منتقل می‌شود، یک شیء ActivityTransitionEvent دریافت می‌کند. .

شما می توانید با ایجاد یک زیر کلاس از BroadcastReceiver و پیاده سازی متد onReceive() برای دریافت لیست رویدادهای انتقال فعالیت، callback خود را پیاده سازی کنید. برای اطلاعات بیشتر، به پخش‌ها مراجعه کنید. مثال زیر نحوه پیاده سازی متد onReceive() نشان می دهد:

کاتلین

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

جاوا

@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 به‌عنوان پارامتر، ثبت‌نام را برای به‌روزرسانی‌های انتقال فعالیت لغو کنید:

کاتلین

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

جاوا

// 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 شناسایی فعالیت کاربر، مطالب زیر را مشاهده کنید:

نمونه ها

نمونه ای برای نشان دادن بهترین شیوه ها برای تشخیص فعالیت کاربر.