ممکن است لازم باشد برنامه خود را طوری طراحی کنید که مشخص کند چه زمانی کاربر یک فعالیت خاص مانند پیاده روی، دوچرخه سواری یا رانندگی را شروع می کند یا متوقف می کند. به عنوان مثال، یک برنامه ردیابی مسافت پیموده شده می تواند هنگامی که کاربر شروع به رانندگی می کند، مایل ها را ردیابی کند، یا یک برنامه پیام رسانی می تواند تمام مکالمات را تا زمانی که کاربر رانندگی را متوقف کند، بی صدا کند.
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
را در مانیفست برنامه مشخص کنید.
- برای اعلام وابستگی به API، یک مرجع به مخزن Google maven اضافه کنید و یک ورودی پیاده سازی به
com.google.android.gms:play-services-location:12.0.0
به بخش وابستگی ها در فایلbuild.gradle
برنامه خود اضافه کنید. . برای اطلاعات بیشتر، به تنظیم خدمات Google Play مراجعه کنید. برای تعیین مجوز
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
که نوع فعالیت و انتقال را مشخص می کند. - پاسخ تماس
PendingIntent
که در آن برنامه شما اعلانها را دریافت میکند. برای اطلاعات بیشتر، استفاده از یک هدف معلق را ببینید.
برای ایجاد شی ActivityTransitionRequest
، باید لیستی از اشیاء ActivityTransition
ایجاد کنید که نشان دهنده انتقالی است که می خواهید اعلان های مربوط به آن را دریافت کنید. یک شی ActivityTransition
شامل داده های زیر است:
- یک نوع فعالیت که با کلاس
DetectedActivity
نمایش داده می شود. Transition API از فعالیت های زیر پشتیبانی می کند: - یک نوع انتقال
ACTIVITY_TRANSITION_ENTER
یاACTIVITY_TRANSITION_EXIT
. برای اطلاعات بیشتر به کلاس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 شناسایی فعالیت کاربر، مطالب زیر را مشاهده کنید:
نمونه ها
نمونه ای برای نشان دادن بهترین شیوه ها برای تشخیص فعالیت کاربر.