۱. مقدمه
ما تلفنهای همراه خود را همه جا با خود حمل میکنیم، اما تاکنون، برای برنامهها دشوار بوده است که تجربه خود را با محیط و فعالیت مداوم کاربر که در حال تغییر است، تطبیق دهند.
برای انجام این کار در گذشته، توسعهدهندگان زمان مهندسی ارزشمندی را صرف ترکیب سیگنالهای مختلف (موقعیت مکانی، حسگر و غیره) میکردند تا زمان شروع یا پایان فعالیتی مانند پیادهروی یا رانندگی را تعیین کنند. حتی بدتر از آن، وقتی برنامهها به طور مستقل و مداوم تغییرات در فعالیت کاربر را بررسی میکنند، عمر باتری کاهش مییابد.
API تشخیص فعالیت (Activity Recognition Transition API) این مشکلات را با ارائه یک API ساده که تمام پردازشها را برای شما انجام میدهد و فقط به شما میگوید که واقعاً به چه چیزی اهمیت میدهید، حل میکند: وقتی فعالیت یک کاربر تغییر کرده است. برنامه شما به سادگی در فعالیتهایی که به آنها علاقهمند هستید، به یک انتقال مشترک میشود و API شما را از تغییرات مطلع میکند.
به عنوان مثال، یک برنامه پیامرسان میتواند از شما بپرسد: «به من بگو چه زمانی کاربر وارد وسیله نقلیه شده یا از آن خارج شده است» تا وضعیت کاربر را به عنوان مشغول تنظیم کند. به طور مشابه، یک برنامه تشخیص پارکینگ میتواند از شما بپرسد: «به من بگو چه زمانی کاربر از وسیله نقلیه خارج شده و شروع به پیادهروی کرده است» تا مکان پارکینگ کاربر را ذخیره کند.
در این آزمایشگاه کد، یاد خواهید گرفت که چگونه از API انتقال تشخیص فعالیت برای تعیین زمان شروع/پایان فعالیتی مانند راه رفتن یا دویدن توسط کاربر استفاده کنید.
پیشنیازها
آشنایی با برنامهنویسی اندروید و آشنایی نسبی با توابع فراخوانی (callback).
آنچه یاد خواهید گرفت
- ثبت نام برای انتقال فعالیت ها
- پردازش آن رویدادها
- لغو ثبت انتقال فعالیتها زمانی که دیگر نیازی به آنها نیست
آنچه نیاز دارید
- اندروید استودیو بامبلبی
- یک دستگاه یا شبیهساز اندروید
۲. شروع کار
مخزن پروژه اولیه را کلون کنید
برای شروع هر چه سریعتر، ما یک پروژه مقدماتی برای شما آماده کردهایم تا بتوانید آن را توسعه دهید. اگر گیت را نصب کردهاید، میتوانید به سادگی دستور زیر را اجرا کنید. (میتوانید با تایپ کردن git --version در ترمینال / خط فرمان، صحت اجرای آن را بررسی کنید.)
git clone https://github.com/android/codelab-activity_transitionapi
اگر گیت ندارید، میتوانید پروژه را به صورت فایل زیپ دریافت کنید:
وارد کردن پروژه
اندروید استودیو را اجرا کنید و از صفحه خوشامدگویی، گزینه «باز کردن یک پروژه اندروید استودیو موجود» را انتخاب کنید و پوشه پروژه را باز کنید.
بعد از بارگذاری پروژه، ممکن است هشداری مبنی بر اینکه گیت تمام تغییرات محلی شما را ردیابی نمیکند، مشاهده کنید. میتوانید روی « نادیده گرفتن» یا « X » در بالا سمت راست کلیک کنید. (شما هیچ تغییری را به مخزن گیت ارسال نخواهید کرد.)
در گوشه سمت چپ بالای پنجره پروژه، اگر در نمای اندروید باشید، باید چیزی شبیه به تصویر زیر ببینید. (اگر در نمای پروژه هستید، برای دیدن همین مورد باید پروژه را گسترش دهید.)

دو آیکون پوشه وجود دارد ( base و complete ). هر یک از آنها به عنوان یک "ماژول" شناخته میشوند.
لطفاً توجه داشته باشید که ممکن است کامپایل پروژه در پسزمینه برای اولین بار توسط اندروید استودیو چند ثانیه طول بکشد. در این مدت، یک چرخنده در نوار وضعیت پایین اندروید استودیو مشاهده خواهید کرد:

توصیه میکنیم قبل از ایجاد تغییرات در کد، تا پایان این مرحله صبر کنید. این کار به اندروید استودیو اجازه میدهد تا تمام اجزای لازم را دریافت کند.
علاوه بر این، اگر با پیامی با مضمون «برای اعمال تغییرات زبان، صفحه را مجدداً بارگذاری کنید؟» یا چیزی مشابه مواجه شدید، «بله» را انتخاب کنید.
پروژه اولیه را درک کنید
بسیار خب، شما راهاندازی شدهاید و آمادهاید تا قابلیت تشخیص فعالیت را اضافه کنید. ما از ماژول base استفاده خواهیم کرد که نقطه شروع این آزمایشگاه کد است. به عبارت دیگر، شما از هر مرحله کد را به base اضافه خواهید کرد.
ماژول complete میتواند برای بررسی کار شما یا برای ارجاع در صورت مواجهه با هرگونه مشکل مورد استفاده قرار گیرد.
مروری بر اجزای کلیدی:
-
MainActivity: شامل تمام کدهای مورد نیاز برای شناسایی فعالیت است.
تنظیمات شبیه ساز
اگر برای راهاندازی شبیهساز اندروید به کمک نیاز دارید، به مقاله اجرای برنامه خود مراجعه کنید.
اجرای پروژه آغازین
بیایید برنامه خود را اجرا کنیم.
- دستگاه اندروید خود را به رایانه متصل کنید یا یک شبیهساز را اجرا کنید.
- در نوار ابزار، پیکربندی
baseرا از منوی کشویی انتخاب کنید و روی دکمه مثلث سبز (اجرا) کنار آن کلیک کنید:

- شما باید برنامه زیر را ببینید:

- این برنامه اکنون کاری جز چاپ یک پیام انجام نمیدهد. اکنون تشخیص فعالیت را اضافه خواهیم کرد.
خلاصه
در این مرحله شما موارد زیر را آموختهاید:
- تنظیمات کلی برای codelab
- اصول اولیه برنامه ما.
- چگونه برنامه خود را مستقر کنید.
۳. کتابخانه را بررسی کنید و مجوز مانیفست را اضافه کنید
برای استفاده از Transition API در برنامه خود، باید یک وابستگی به Google Location and Activity Recognition API اعلام کنید و مجوز com.google.android.gms.permission.ACTIVITY_RECOGNITION را در مانیفست برنامه مشخص کنید.
- در فایل build.gradle به دنبال TODO: Review play services library required for activity recognition بگردید. هیچ عملی برای این مرحله (مرحله ۱) وجود ندارد، فقط dependency اعلام شده مورد نیاز را بررسی کنید. باید چیزی شبیه به این باشد:
// TODO: Review play services library required for activity recognition.
implementation 'com.google.android.gms:play-services-location:19.0.1'
- در ماژول
base، عبارت TODO: را جستجو کنید. هر دو مجوز تشخیص فعالیت را به فایلAndroidManifest.xmlدر فایل Manifest اضافه کنید و کد زیر را به عنصر<manifest>اضافه کنید.
<!-- TODO: Add both activity recognition permissions to the manifest. -->
<!-- Required for 28 and below. -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<!-- Required for 29+. -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
کد شما اکنون باید چیزی شبیه به این باشد:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapp">
<!-- TODO: Add both activity recognition permissions to the manifest. -->
<!-- Required for 28 and below. -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<!-- Required for 29+. -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
...
</manifest>
همانطور که از نظرات مشاهده میکنید، باید یک مجوز دوم برای اندروید ۱۰ اضافه کنید. این مجوز برای مجوز زمان اجرا که در API نسخه ۲۹ اضافه شده است، لازم است.
همین! برنامه شما اکنون میتواند از تشخیص فعالیت پشتیبانی کند، فقط باید کد را برای دریافت آن اضافه کنیم.
اجرای برنامه
برنامه خود را از اندروید استودیو اجرا کنید. باید دقیقاً مشابه باشد. ما هنوز هیچ کدی برای ردیابی انتقالها اضافه نکردهایم، که در بخش بعدی خواهد بود.
۴. بررسی/درخواست مجوزهای زمان اجرا در اندروید
اگرچه ما برای API نسخه ۲۸ و پایینتر مجوز داریم، اما باید از مجوزهای زمان اجرا در API نسخه ۲۹ و بالاتر پشتیبانی کنیم:
- در فایل
MainActivity.javaبررسی خواهیم کرد که آیا کاربر از اندروید ۱۰ (۲۹) یا بالاتر استفاده میکند یا خیر، و اگر چنین باشد، مجوزهای تشخیص فعالیت را بررسی خواهیم کرد. - اگر مجوزها اعطا نشوند، کاربر را به یک صفحه شروع (
PermissionRationalActivity.java) هدایت میکنیم که در آن توضیح میدهیم چرا برنامه به این مجوز نیاز دارد و به او اجازه میدهیم آن را تأیید کند.
بررسی کد بررسی نسخه اندروید
در ماژول base ، عبارت TODO: Review check for devices with Android 10 (29+) را در MainActivity.java جستجو کنید. باید این قطعه کد را ببینید.
توجه داشته باشید، هیچ اقدامی برای این بخش وجود ندارد.
// TODO: Review check for devices with Android 10 (29+).
private boolean runningQOrLater =
android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q;
همانطور که قبلاً گفته شد، در اندروید ۱۰ و بالاتر، برای مجوز زمان اجرا به تأیید android.permission.ACTIVITY_RECOGNITION نیاز دارید. ما از این بررسی ساده برای تصمیمگیری در مورد نیاز به بررسی مجوزهای زمان اجرا استفاده میکنیم.
در صورت نیاز، بررسی مجوز زمان اجرا را برای تشخیص فعالیت مرور کنید
در ماژول base ، عبارت TODO: Review permission check for 29+ را در MainActivity.java جستجو کنید. باید این قطعه کد را ببینید.
توجه داشته باشید، هیچ اقدامی برای این بخش وجود ندارد.
// TODO: Review permission check for 29+.
if (runningQOrLater) {
return PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(
this,
Manifest.permission.ACTIVITY_RECOGNITION
);
} else {
return true;
}
ما از متغیری که در مرحله قبل ایجاد کردیم استفاده میکنیم تا ببینیم آیا نیاز به بررسی مجوزهای زمان اجرا داریم یا خیر.
برای Q و بالاتر، ما بررسی میکنیم و نتیجه را برای مجوز زمان اجرا برمیگردانیم. این بخشی از یک متد بزرگتر به نام activityRecognitionPermissionApproved() است که به توسعهدهنده اجازه میدهد با یک فراخوانی ساده بداند که آیا نیاز به درخواست مجوز داریم یا خیر.
درخواست مجوزهای زمان اجرا و فعال/غیرفعال کردن انتقالهای تشخیص فعالیت
در ماژول base ، TODO: Enable/Disable activity tracking را جستجو کنید و در صورت نیاز در MainActivity.java درخواست مجوز کنید . کد زیر را بعد از کامنت اضافه کنید.
// TODO: Enable/Disable activity tracking and ask for permissions if needed.
if (activityRecognitionPermissionApproved()) {
if (activityTrackingEnabled) {
disableActivityTransitions();
} else {
enableActivityTransitions();
}
} else {
// Request permission and start activity for result. If the permission is approved, we
// want to make sure we start activity recognition tracking.
Intent startIntent = new Intent(this, PermissionRationalActivity.class);
startActivityForResult(startIntent, 0);
}
در اینجا میپرسیم که آیا تشخیص فعالیت تأیید شده است یا خیر. اگر تأیید شده است و تشخیص فعالیت از قبل فعال شده است، آن را غیرفعال میکنیم. در غیر این صورت، آن را فعال میکنیم.
برای حالتی که مجوز تأیید نمیشود، کاربر را به فعالیت صفحه شروع (splash screen) میفرستیم که توضیح میدهد چرا به مجوز نیاز داریم و به او اجازه میدهیم آن را فعال کند.
کد درخواست مجوز را بررسی کنید
در ماژول base ، عبارت TODO: Review permission request for activity recognition را در PermissionRationalActivity.java جستجو کنید. باید این قطعه کد را ببینید.
توجه داشته باشید، هیچ اقدامی برای این بخش وجود ندارد.
// TODO: Review permission request for activity recognition.
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.ACTIVITY_RECOGNITION},
PERMISSION_REQUEST_ACTIVITY_RECOGNITION)
این مهمترین بخش Activity و بخشی است که باید بررسی شود. کد، درخواست مجوز را زمانی که کاربر درخواست میکند، فعال میکند.
خارج از آن، کلاس PermissionRationalActivity.java دلیلی را نشان میدهد که چرا کاربر باید مجوز تشخیص فعالیت را تأیید کند (بهترین روش). کاربر میتواند روی دکمه «نه ممنون» یا دکمه «ادامه » (که کد بالا را اجرا میکند) کلیک کند.
اگر مایل به کسب اطلاعات بیشتر هستید، فایل را بررسی کنید.
۵. ثبت/لغو ثبت گیرنده برای انتقال فعالیتها
قبل از اینکه کد تشخیص فعالیت را تنظیم کنیم، میخواهیم مطمئن شویم که فعالیت ما میتواند اقدامات انتقالی مطرح شده توسط سیستم را مدیریت کند.
یک BroadcastReceiver برای انتقال ایجاد کنید
در ماژول base ، عبارت TODO: Create a BroadcastReceiver to listen for activity transitions in MainActivity.java را جستجو کنید. قطعه کد زیر را در آن جایگذاری کنید.
// TODO: Create a BroadcastReceiver to listen for activity transitions.
// The receiver listens for the PendingIntent above that is triggered by the system when an
// activity transition occurs.
mTransitionsReceiver = new TransitionsReceiver();
برای انتقال، یک BroadcastReceiver ثبت کنید
در ماژول base ، عبارت TODO: Register a BroadcastReceiver to listen for activity transitions in MainActivity.java را جستجو کنید. (این عبارت در onStart() قرار دارد). قطعه کد زیر را در آن قرار دهید.
// TODO: Register a BroadcastReceiver to listen for activity transitions.
registerReceiver(mTransitionsReceiver, new IntentFilter(TRANSITIONS_RECEIVER_ACTION));
حالا ما راهی داریم که وقتی انتقالهای اکتیویتی از طریق PendingIntent اجرا میشوند، بهروزرسانیها را دریافت کنیم.
لغو ثبت BroadcastReceiver
در ماژول base ، عبارت Unregister activity transition receiver when user leaves the app را در MainActivity.java جستجو کنید. (این عبارت در onStop() قرار دارد). قطعه کد زیر را در آن قرار دهید.
// TODO: Unregister activity transition receiver when user leaves the app.
unregisterReceiver(mTransitionsReceiver);
بهترین روش این است که وقتی Activity در حال خاموش شدن است، یک گیرنده را از حالت ثبت خارج کنید.
۶. تنظیم انتقال فعالیتها و درخواست بهروزرسانیها
برای شروع دریافت بهروزرسانیهای انتقال فعالیت، باید موارد زیر را پیادهسازی کنید:
- یک شیء ActivityTransitionRequest که نوع فعالیت و انتقال را مشخص میکند.
- یک فراخوانی برگشتی PendingIntent که در آن برنامه شما اعلانها را دریافت میکند. برای اطلاعات بیشتر، به استفاده از pending intent مراجعه کنید.
فهرستی از ActivityiyTransitions برای دنبال کردن ایجاد کنید
برای ایجاد شیء ActivityTransitionRequest ، باید فهرستی از اشیاء ActivityTransition ایجاد کنید که نشاندهندهی گذار مورد نظر برای ردیابی باشند. یک شیء ActivityTransition شامل دادههای زیر است:
- یک نوع فعالیت، که توسط کلاس DetectedActivity نمایش داده میشود. Transition API از فعالیتهای زیر پشتیبانی میکند:
- یک نوع انتقال، که توسط کلاس ActivityTransition نمایش داده میشود. انواع انتقال عبارتند از:
در ماژول base ، عبارت TODO: Add activity transitions to track را در MainActivity.java جستجو کنید. کد زیر را بعد از کامنت اضافه کنید.
// TODO: Add activity transitions to track.
activityTransitionList.add(new ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build());
activityTransitionList.add(new ActivityTransition.Builder()
.setActivityType(DetectedActivity.WALKING)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build());
activityTransitionList.add(new ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER)
.build());
activityTransitionList.add(new ActivityTransition.Builder()
.setActivityType(DetectedActivity.STILL)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT)
.build());
این کد، انتقالهایی را که میخواهیم ردیابی کنیم به یک لیست قبلاً خالی اضافه میکند.
ایجاد یک PendingIntent
همانطور که قبلاً گفته شد، اگر میخواهیم از هرگونه تغییر در ActivityTransitionRequest خود مطلع شویم، به یک PendingIntent نیاز داریم، بنابراین قبل از تنظیم ActivityTransitionRequest ، باید یک PendingIntent ایجاد کنیم.
در ماژول base ، عبارت TODO: Initialize PendingIntent را جستجو کنید که هنگام وقوع انتقال یک فعالیت در MainActivity.java فعال میشود . کد زیر را بعد از کامنت اضافه کنید.
// TODO: Initialize PendingIntent that will be triggered when a activity transition occurs.
Intent intent = new Intent(TRANSITIONS_RECEIVER_ACTION);
mActivityTransitionsPendingIntent =
PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
حالا ما یک PendingIntent داریم که میتوانیم آن را هنگام وقوع یکی از ActivityTransitionها فعال کنیم.
یک ActivityTransitionRequest ایجاد کنید و درخواست بهروزرسانی دهید
شما میتوانید با ارسال لیست ActivityTransitions به کلاس ActivityTransitionRequest، یک شیء ActivityTransitionRequest ایجاد کنید.
در ماژول base ، عبارت Create request را جستجو کنید و به تغییرات فعالیت در MainActivity.java گوش دهید. کد زیر را بعد از کامنت اضافه کنید.
// TODO: Create request and listen for activity changes.
ActivityTransitionRequest request = new ActivityTransitionRequest(activityTransitionList);
// Register for Transitions Updates.
Task<Void> task =
ActivityRecognition.getClient(this)
.requestActivityTransitionUpdates(request, mActivityTransitionsPendingIntent);
task.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
activityTrackingEnabled = true;
printToScreen("Transitions Api was successfully registered.");
}
});
task.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
printToScreen("Transitions Api could NOT be registered: " + e);
Log.e(TAG, "Transitions Api could NOT be registered: " + e);
}
});
بیایید کد را بررسی کنیم. ابتدا، یک ActivityTransitionRequest از لیست انتقال فعالیت خود ایجاد میکنیم.
ActivityTransitionRequest request = new ActivityTransitionRequest(activityTransitionList);
در مرحله بعد، با ارسال نمونه ActivityTransitionRequest و شیء PendingIntent خود که در مرحله قبل ایجاد کردیم به متد requestActivityTransitionUpdates() ، برای بهروزرسانیهای انتقال فعالیت ثبتنام میکنیم. متد requestActivityTransitionUpdates() یک شیء Task برمیگرداند که میتوانید موفقیت یا شکست آن را بررسی کنید، همانطور که در بلوک بعدی کد نشان داده شده است:
// Register for Transitions Updates.
Task<Void> task =
ActivityRecognition.getClient(this)
.requestActivityTransitionUpdates(request, mActivityTransitionsPendingIntent);
task.addOnSuccessListener(
new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
activityTrackingEnabled = true;
printToScreen("Transitions Api was successfully registered.");
}
});
task.addOnFailureListener(
new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
printToScreen("Transitions Api could NOT be registered: " + e);
Log.e(TAG, "Transitions Api could NOT be registered: " + e);
}
});
پس از ثبت موفقیتآمیز بهروزرسانیهای انتقال فعالیت، برنامه شما اعلانهایی را در PendingIntent ثبتشده دریافت میکند. ما همچنین متغیری را تنظیم میکنیم که ردیابی فعالیت را فعال میکند تا به ما اجازه دهد بدانیم که آیا اگر کاربر دوباره روی دکمه کلیک کند، آن را غیرفعال/فعال کنیم.
حذف بهروزرسانیها هنگام بسته شدن برنامه
مهم است که هنگام بسته شدن برنامه، بهروزرسانیهای انتقال را حذف کنیم.
در ماژول base ، عبارت «Stop listening for activity changes» را در MainActivity.java جستجو کنید. کد زیر را بعد از کامنت اضافه کنید.
// TODO: Stop listening for activity changes.
ActivityRecognition.getClient(this).removeActivityTransitionUpdates(mActivityTransitionsPendingIntent)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
activityTrackingEnabled = false;
printToScreen("Transitions successfully unregistered.");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
printToScreen("Transitions could not be unregistered: " + e);
Log.e(TAG,"Transitions could not be unregistered: " + e);
}
});
حالا باید متد حاوی کد بالا را هنگام خاموش شدن برنامه فراخوانی کنیم.
در ماژول base ، عبارت TODO: Disable activity transitions when user leaves the app را در MainActivity.java در onPause() جستجو کنید. کد زیر را بعد از کامنت اضافه کنید.
// TODO: Disable activity transitions when user leaves the app.
if (activityTrackingEnabled) {
disableActivityTransitions();
}
ردیابی تغییرات در انتقال فعالیتها به همین جا ختم شد. حالا فقط باید بهروزرسانیها را پردازش کنیم.
۷. پردازش رویدادها
وقتی انتقال فعالیت درخواستی رخ میدهد، برنامه شما یک فراخوانی Intent دریافت میکند. یک شیء ActivityTransitionResult میتواند از Intent استخراج شود که شامل لیستی از اشیاء ActivityTransitionEvent است. رویدادها به ترتیب زمانی مرتب میشوند، برای مثال، اگر برنامهای برای نوع فعالیت IN_VEHICLE در انتقالهای ACTIVITY_TRANSITION_ENTER و ACTIVITY_TRANSITION_EXIT درخواست کند، هنگامی که کاربر شروع به رانندگی میکند، یک شیء ActivityTransitionEvent و هنگامی که کاربر به هر فعالیت دیگری منتقل میشود، یک شیء ActivityTransitionEvent دریافت میکند.
بیایید کدی را برای مدیریت آن رویدادها اضافه کنیم.
در ماژول base ، در onReceive() از BroadcastReceiver که قبلاً ایجاد کردیم، عبارت TODO: Extract activity transition information from listener در MainActivity.java را جستجو کنید. کد زیر را بعد از کامنت اضافه کنید.
// TODO: Extract activity transition information from listener.
if (ActivityTransitionResult.hasResult(intent)) {
ActivityTransitionResult result = ActivityTransitionResult.extractResult(intent);
for (ActivityTransitionEvent event : result.getTransitionEvents()) {
String info = "Transition: " + toActivityString(event.getActivityType()) +
" (" + toTransitionType(event.getTransitionType()) + ")" + " " +
new SimpleDateFormat("HH:mm:ss", Locale.US).format(new Date());
printToScreen(info);
}
}
این کد اطلاعات را به یک String تبدیل کرده و آن را روی صفحه نمایش چاپ میکند.
همین است، کار شما تمام شد! برنامه را اجرا کنید.
نکته مهم: ایجاد تغییرات فعالیت روی شبیهساز دشوار است، بنابراین توصیه میکنیم از یک دستگاه فیزیکی استفاده کنید.
شما باید بتوانید تغییرات فعالیت را پیگیری کنید.
برای بهترین نتیجه، برنامه را روی یک دستگاه فیزیکی نصب کنید و در آن قدم بزنید. :)
۸. کد را بررسی کنید
شما یک برنامه ساده ساختید که انتقالهای Activity را ردیابی میکند و آنها را روی صفحه نمایش میدهد.
میتوانید کد را بهطور کامل بخوانید تا کارهایی که انجام دادهاید را مرور کنید و درک بهتری از نحوهی عملکرد آن داشته باشید.