1. ভূমিকা
আমরা সর্বত্র আমাদের সাথে ফোন বহন করি, কিন্তু এখন পর্যন্ত, ব্যবহারকারীর ক্রমাগত পরিবর্তিত পরিবেশ এবং কার্যকলাপের সাথে তাদের অভিজ্ঞতা সামঞ্জস্য করা অ্যাপগুলির পক্ষে কঠিন ছিল৷
অতীতে এটি করার জন্য, বিকাশকারীরা বিভিন্ন সংকেত (অবস্থান, সেন্সর, ইত্যাদি) একত্রিত করার জন্য মূল্যবান ইঞ্জিনিয়ারিং সময় ব্যয় করে হাঁটা বা গাড়ি চালানোর মতো কার্যকলাপ কখন শুরু হয়েছিল বা শেষ হয়েছিল তা নির্ধারণ করতে। আরও খারাপ, যখন অ্যাপগুলি স্বাধীনভাবে এবং ক্রমাগতভাবে ব্যবহারকারীর কার্যকলাপের পরিবর্তনগুলি পরীক্ষা করে, তখন ব্যাটারি লাইফ ক্ষতিগ্রস্ত হয়।
অ্যাক্টিভিটি রিকগনিশন ট্রানজিশন এপিআই একটি সাধারণ API প্রদান করে এই সমস্যাগুলি সমাধান করে যা আপনার জন্য সমস্ত প্রক্রিয়াকরণ করে এবং আপনাকে বলে যে আপনি আসলে কী সম্পর্কে যত্নশীল: যখন একজন ব্যবহারকারীর কার্যকলাপ পরিবর্তিত হয়। আপনার অ্যাপ্লিকেশানটি কেবল আপনার আগ্রহের ক্রিয়াকলাপের একটি পরিবর্তনে সদস্যতা নেয় এবং API আপনাকে পরিবর্তনগুলি সম্পর্কে অবহিত করে৷
উদাহরণ হিসাবে, একটি মেসেজিং অ্যাপ ব্যবহারকারীর স্থিতিকে ব্যস্ত হিসাবে সেট করতে "ব্যবহারকারী কখন একটি যানবাহনে প্রবেশ করেছে বা প্রস্থান করেছে তা আমাকে বলুন" জিজ্ঞাসা করতে পারে। একইভাবে, একটি পার্কিং সনাক্তকরণ অ্যাপ ব্যবহারকারীর পার্কিং অবস্থান সংরক্ষণ করতে "ব্যবহারকারী কখন গাড়ি থেকে বের হয়ে হাঁটতে শুরু করেছে তা আমাকে বলুন" জিজ্ঞাসা করতে পারে।
এই কোডল্যাবে, একজন ব্যবহারকারী কখন হাঁটা বা দৌড়ানোর মতো কোনো কার্যকলাপ শুরু/বন্ধ করে তা নির্ধারণ করতে আপনি কীভাবে অ্যাক্টিভিটি রিকগনিশন ট্রানজিশন API ব্যবহার করবেন তা শিখবেন।
পূর্বশর্ত
অ্যান্ড্রয়েড বিকাশের সাথে পরিচিতি এবং কলব্যাকের সাথে কিছু পরিচিতি।
আপনি কি শিখবেন
- কার্যকলাপ পরিবর্তনের জন্য নিবন্ধন
- সেই ইভেন্টগুলি প্রক্রিয়া করা হচ্ছে
- কার্যকলাপ পরিবর্তনের জন্য নিবন্ধনমুক্ত করা যখন তাদের আর প্রয়োজন হয় না
আপনি কি প্রয়োজন হবে
- অ্যান্ড্রয়েড স্টুডিও বাম্বলবি
- একটি অ্যান্ড্রয়েড ডিভাইস বা এমুলেটর
2. শুরু করা
স্টার্টার প্রজেক্ট রেপো ক্লোন করুন
যত তাড়াতাড়ি সম্ভব আপনাকে শুরু করতে, আমরা আপনার জন্য একটি স্টার্টার প্রকল্প তৈরি করেছি। আপনি যদি গিট ইনস্টল করে থাকেন তবে আপনি কেবল নীচের কমান্ডটি চালাতে পারেন। (আপনি টার্মিনাল/কমান্ড লাইনে git --version
টাইপ করে চেক করতে পারেন এবং যাচাই করুন এটি সঠিকভাবে কার্যকর হয়েছে।)
git clone https://github.com/android/codelab-activity_transitionapi
আপনার যদি গিট না থাকে তবে আপনি একটি জিপ ফাইল হিসাবে প্রকল্পটি পেতে পারেন:
প্রকল্পটি আমদানি করুন
অ্যান্ড্রয়েড স্টুডিও শুরু করুন, এবং স্বাগতম স্ক্রীন থেকে "একটি বিদ্যমান অ্যান্ড্রয়েড স্টুডিও প্রকল্প খুলুন" নির্বাচন করুন এবং প্রকল্প ডিরেক্টরি খুলুন।
প্রকল্পটি লোড হওয়ার পরে, আপনি একটি সতর্কতাও দেখতে পারেন যে গিট আপনার সমস্ত স্থানীয় পরিবর্তনগুলি ট্র্যাক করছে না, আপনি উপরের ডানদিকে " উপেক্ষা করুন" বা " X " ক্লিক করতে পারেন। (আপনি গিট রেপোতে কোনও পরিবর্তন ফিরিয়ে আনবেন না।)
প্রজেক্ট উইন্ডোর উপরের বাম কোণে, আপনি যদি অ্যান্ড্রয়েড ভিউতে থাকেন তবে নীচের ছবির মতো কিছু দেখতে পাবেন। (আপনি যদি প্রকল্পের দৃশ্যে থাকেন তবে একই জিনিস দেখতে আপনাকে প্রকল্পটি প্রসারিত করতে হবে।)
দুটি ফোল্ডার আইকন আছে ( base
এবং complete
)। তাদের প্রতিটি একটি "মডিউল" হিসাবে পরিচিত।
অনুগ্রহ করে মনে রাখবেন যে অ্যান্ড্রয়েড স্টুডিও প্রথমবারের মতো পটভূমিতে প্রকল্পটি কম্পাইল করতে কয়েক সেকেন্ড সময় নিতে পারে। এই সময়ের মধ্যে আপনি অ্যান্ড্রয়েড স্টুডিওর নীচে স্ট্যাটাস বারে একটি স্পিনার দেখতে পাবেন:
আমরা সুপারিশ করছি যে আপনি কোড পরিবর্তন করার আগে এটি শেষ না হওয়া পর্যন্ত অপেক্ষা করুন। এটি অ্যান্ড্রয়েড স্টুডিওকে সমস্ত প্রয়োজনীয় উপাদানগুলিকে টানতে অনুমতি দেবে৷
এছাড়াও, আপনি যদি "ভাষা পরিবর্তনগুলি কার্যকর করার জন্য পুনরায় লোড করুন?" বা অনুরূপ কিছু, "হ্যাঁ" নির্বাচন করুন।
স্টার্টার প্রজেক্ট বুঝুন
ঠিক আছে, আপনি সেট আপ করেছেন এবং কার্যকলাপের স্বীকৃতি যোগ করার জন্য প্রস্তুত৷ আমরা base
মডিউল ব্যবহার করব, যা এই কোডল্যাবের সূচনা বিন্দু। অন্য কথায়, আপনি প্রতিটি ধাপ থেকে base
কোড যোগ করবেন।
complete
মডিউলটি আপনার কাজ পরীক্ষা করার জন্য ব্যবহার করা যেতে পারে, অথবা আপনি যদি কোনো সমস্যার সম্মুখীন হন তাহলে রেফারেন্স দেওয়ার জন্য।
মূল উপাদানগুলির সংক্ষিপ্ত বিবরণ:
-
MainActivity
: কার্যকলাপের স্বীকৃতির জন্য প্রয়োজনীয় সমস্ত কোড রয়েছে।
এমুলেটর সেটআপ
আপনার যদি একটি অ্যান্ড্রয়েড এমুলেটর সেট আপ করতে সহায়তার প্রয়োজন হয় তবে আপনার অ্যাপ চালান নিবন্ধটি পড়ুন।
স্টার্টার প্রকল্প চালান
আসুন আমাদের অ্যাপটি চালাই।
- আপনার কম্পিউটারে আপনার অ্যান্ড্রয়েড ডিভাইসটি সংযুক্ত করুন বা একটি এমুলেটর শুরু করুন৷
- টুলবারে, ড্রপ-ডাউন নির্বাচক থেকে
base
কনফিগারেশন নির্বাচন করুন এবং এর পাশে সবুজ ত্রিভুজ (রান) বোতামে ক্লিক করুন:
- আপনি নীচের আবেদন দেখতে হবে:
- অ্যাপটি এখন একটি বার্তা প্রিন্ট করার বাইরে কিছু করে না। আমরা এখন কার্যকলাপ স্বীকৃতি যোগ করব।
সারাংশ
এই ধাপে আপনি শিখেছেন:
- কোডল্যাবের জন্য সাধারণ সেটআপ।
- আমাদের অ্যাপের মৌলিক বিষয়।
- কিভাবে আপনার অ্যাপ স্থাপন করবেন।
3. লাইব্রেরি পর্যালোচনা করুন এবং ম্যানিফেস্টে অনুমতি যোগ করুন
আপনার অ্যাপে ট্রানজিশন API ব্যবহার করতে, আপনাকে অবশ্যই Google অবস্থান এবং কার্যকলাপ শনাক্তকরণ API-এর উপর নির্ভরতা ঘোষণা করতে হবে এবং অ্যাপ ম্যানিফেস্টে com.google.android.gms.permission.ACTIVITY_RECOGNITION অনুমতি উল্লেখ করতে হবে।
- TODO এর জন্য অনুসন্ধান করুন: build.gradle ফাইলে কার্যকলাপ স্বীকৃতির জন্য প্রয়োজনীয় প্লে পরিষেবা লাইব্রেরি পর্যালোচনা করুন । এই ধাপের জন্য কোন কাজ নেই (ধাপ 1), শুধু আমাদের প্রয়োজন ঘোষিত নির্ভরতা পর্যালোচনা করুন। এটি এই মত হওয়া উচিত:
// 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>
উপাদানে নীচের কোড যোগ করুন।
<!-- 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>
আপনি মন্তব্য থেকে দেখতে পাচ্ছেন, আপনাকে Android 10 এর জন্য একটি দ্বিতীয় অনুমতি যোগ করতে হবে। API সংস্করণ 29-এ যোগ করা রানটাইম অনুমতির জন্য এটি প্রয়োজন।
তাই তো! আপনার অ্যাপ এখন কার্যকলাপ স্বীকৃতি সমর্থন করতে পারে, এটি পেতে আমাদের শুধু কোড যোগ করতে হবে।
অ্যাপ চালান
অ্যান্ড্রয়েড স্টুডিও থেকে আপনার অ্যাপ চালান। এটা ঠিক একই দেখতে হবে. ট্রানজিশন ট্র্যাক করার জন্য আমরা আসলে কোনো কোড যোগ করিনি, যা পরবর্তী বিভাগে থাকবে।
4. অ্যান্ড্রয়েডে রানটাইম অনুমতি পরীক্ষা করা/অনুরোধ করা হচ্ছে
যখন আমরা API সংস্করণ 28 এবং নীচের অনুমতির জন্য কভার করি, তখন আমাদের API সংস্করণ 29 এবং তার পরেও রানটাইম অনুমতি সমর্থন করতে হবে:
-
MainActivity.java
এ, আমরা ব্যবহারকারী Android 10 (29) বা তার পরবর্তী সংস্করণে আছে কিনা তা পরীক্ষা করব এবং তারা থাকলে, আমরা কার্যকলাপ স্বীকৃতির অনুমতি পরীক্ষা করব। - যদি অনুমতি না দেওয়া হয়, আমরা ব্যবহারকারীকে একটি স্প্ল্যাশ স্ক্রিনে পাঠাব (
PermissionRationalActivity.java
) কেন অ্যাপটির অনুমতি প্রয়োজন এবং তাদের অনুমোদনের অনুমতি দেব।
অ্যান্ড্রয়েড সংস্করণ পরীক্ষা কোড পর্যালোচনা করুন
base
মডিউলে, TODO অনুসন্ধান করুন: MainActivity.java
এ Android 10 (29+) সহ ডিভাইসগুলির জন্য পর্যালোচনা করুন । আপনি এই কোড স্নিপেট দেখতে হবে.
উল্লেখ্য, এই বিভাগের জন্য কোন ব্যবস্থা নেই।
// 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 10 এবং তার পরের সংস্করণে রানটাইম অনুমতি android.permission.ACTIVITY_RECOGNITION
এর জন্য অনুমোদন প্রয়োজন। রানটাইম পারমিশন চেক করতে হবে কিনা তা নির্ধারণ করতে আমরা এই সাধারণ চেকটি ব্যবহার করি।
প্রয়োজনে কার্যকলাপ স্বীকৃতির জন্য রানটাইম অনুমতি পরীক্ষা পর্যালোচনা করুন
base
মডিউলে, TODO-এর জন্য অনুসন্ধান করুন: MainActivity.java
এ 29+ এর জন্য অনুমতি চেক পর্যালোচনা করুন। আপনি এই কোড স্নিপেট দেখতে হবে.
উল্লেখ্য, এই বিভাগের জন্য কোন ব্যবস্থা নেই।
// 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-এর জন্য অনুসন্ধান করুন: কার্যকলাপ ট্র্যাকিং সক্ষম/অক্ষম করুন এবং প্রয়োজনে 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);
}
এখানে আমরা জিজ্ঞাসা করি যে কার্যকলাপ স্বীকৃতি অনুমোদিত কিনা। যদি এটি হয় এবং কার্যকলাপ স্বীকৃতি ইতিমধ্যে সক্ষম করা আছে, আমরা এটি নিষ্ক্রিয়. অন্যথায়, আমরা এটি সক্ষম করি।
সেই ক্ষেত্রে যখন অনুমতি অনুমোদিত হয় না, আমরা ব্যবহারকারীকে স্প্ল্যাশ স্ক্রিন কার্যকলাপে পাঠাই যা ব্যাখ্যা করে যে কেন আমাদের অনুমতি প্রয়োজন এবং তাদের এটি সক্ষম করার অনুমতি দেয়।
অনুমতি অনুরোধ কোড পর্যালোচনা করুন
base
মডিউলে, TODO-এর জন্য অনুসন্ধান করুন: PermissionRationalActivity.java
এ কার্যকলাপ স্বীকৃতির জন্য অনুমতির অনুরোধ পর্যালোচনা করুন। আপনি এই কোড স্নিপেট দেখতে হবে.
উল্লেখ্য, এই বিভাগের জন্য কোন ব্যবস্থা নেই।
// TODO: Review permission request for activity recognition.
ActivityCompat.requestPermissions(
this,
new String[]{Manifest.permission.ACTIVITY_RECOGNITION},
PERMISSION_REQUEST_ACTIVITY_RECOGNITION)
এটি কার্যকলাপের সবচেয়ে গুরুত্বপূর্ণ অংশ এবং পর্যালোচনা করার অংশ। ব্যবহারকারী যখন অনুরোধ করে তখন কোডটি অনুমতির জন্য অনুরোধটি ট্রিগার করে।
এর বাইরে, PermissionRationalActivity.java
ক্লাস একটি যুক্তি প্রদর্শন করে যে কেন ব্যবহারকারীর কার্যকলাপ স্বীকৃতির অনুমতি (সর্বোত্তম অনুশীলন) অনুমোদন করা উচিত। ব্যবহারকারী হয় না ধন্যবাদ বোতামে ক্লিক করতে পারেন বা চালিয়ে যান বোতামে (যা উপরের কোডটিকে ট্রিগার করে)।
আপনি যদি আরও জানতে চান তবে ফাইলটি পর্যালোচনা করতে দ্বিধা বোধ করুন।
5. অ্যাক্টিভিটি ট্রানজিশনের জন্য রিসিভার নিবন্ধন/অনিবন্ধন করুন
আমরা কার্যকলাপ সনাক্তকরণ কোড সেটআপ করার আগে, আমরা নিশ্চিত করতে চাই যে আমাদের কার্যকলাপ সিস্টেম দ্বারা উত্থাপিত রূপান্তর ক্রিয়াগুলি পরিচালনা করতে পারে৷
পরিবর্তনের জন্য একটি BroadcastReceiver তৈরি করুন
base
মডিউলে, TODO-এর জন্য অনুসন্ধান করুন: MainActivity.java
এ কার্যকলাপ পরিবর্তনের জন্য একটি BroadcastReceiver তৈরি করুন । নীচে স্নিপেট আটকান.
// 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-এর জন্য অনুসন্ধান করুন: MainActivity.java
এ কার্যকলাপ পরিবর্তনের জন্য একটি BroadcastReceiver নিবন্ধন করুন । (এটি onStart()
এ রয়েছে)। নীচে স্নিপেট আটকান.
// TODO: Register a BroadcastReceiver to listen for activity transitions.
registerReceiver(mTransitionsReceiver, new IntentFilter(TRANSITIONS_RECEIVER_ACTION));
এখন আমাদের কাছে আপডেট পাওয়ার একটি উপায় আছে যখন পেন্ডিংইন্টেন্টের মাধ্যমে অ্যাক্টিভিটি ট্রানজিশন উত্থাপিত হয়।
ব্রডকাস্ট রিসিভার নিবন্ধনমুক্ত করুন
base
মডিউলে, ব্যবহারকারী যখন MainActivity.java
এ অ্যাপটি ছেড়ে যায় তখন আনরেজিস্টার অ্যাক্টিভিটি ট্রানজিশন রিসিভার অনুসন্ধান করুন। (এটি onStop()
) এ রয়েছে। নিচের স্নিপেটটি পেস্ট করুন।
// TODO: Unregister activity transition receiver when user leaves the app.
unregisterReceiver(mTransitionsReceiver);
Activity
বন্ধ হয়ে গেলে রিসিভার আনরেজিস্টার করা সবচেয়ে ভালো অভ্যাস।
6. সেটআপ কার্যকলাপ পরিবর্তন এবং অনুরোধ আপডেট
অ্যাক্টিভিটি ট্রানজিশন আপডেট পেতে শুরু করতে, আপনাকে অবশ্যই বাস্তবায়ন করতে হবে:
- একটি ActivityTransitionRequest অবজেক্ট যা ক্রিয়াকলাপ এবং স্থানান্তরের ধরন নির্দিষ্ট করে।
- একটি PendingIntent কলব্যাক যেখানে আপনার অ্যাপ বিজ্ঞপ্তি পায়। আরও তথ্যের জন্য, একটি মুলতুবি অভিপ্রায় ব্যবহার করা দেখুন।
অনুসরণ করার জন্য ActivitiyTransitions এর একটি তালিকা তৈরি করুন
ActivityTransitionRequest অবজেক্ট তৈরি করতে, আপনাকে অবশ্যই ActivityTransition অবজেক্টের একটি তালিকা তৈরি করতে হবে, যা আপনি যে ট্রানজিশন ট্র্যাক করতে চান তার প্রতিনিধিত্ব করে। একটি অ্যাক্টিভিটি ট্রানজিশন অবজেক্টে নিম্নলিখিত ডেটা থাকে:
- একটি কার্যকলাপের ধরন, ডিটেক্টেড অ্যাক্টিভিটি ক্লাস দ্বারা প্রতিনিধিত্ব করা হয়। ট্রানজিশন API নিম্নলিখিত ক্রিয়াকলাপগুলিকে সমর্থন করে:
- একটি ট্রানজিশন টাইপ, যা অ্যাক্টিভিটি ট্রানজিশন ক্লাস দ্বারা উপস্থাপিত হয়। রূপান্তর প্রকারগুলি হল:
base
মডিউলে, TODO-এর জন্য অনুসন্ধান করুন: 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-এর জন্য অনুসন্ধান করুন: 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 তৈরি করুন এবং আপডেটের অনুরোধ করুন
ActivityTransitionRequest ক্লাসে ActivityTransitions তালিকা পাস করে আপনি একটি ActivityTransitionRequest অবজেক্ট তৈরি করতে পারেন।
base
মডিউলে, ক্রিয়েট রিকোয়েস্ট সার্চ করুন এবং 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() পদ্ধতিটি একটি টাস্ক অবজেক্ট প্রদান করে যা আপনি সাফল্য বা ব্যর্থতার জন্য পরীক্ষা করতে পারেন, কোডের পরবর্তী ব্লকে দেখানো হয়েছে:
// 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
মডিউলে, 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-এর জন্য অনুসন্ধান করুন: ব্যবহারকারী যখন onPause()
এ MainActivity.java
এ অ্যাপটি ছেড়ে যায় তখন কার্যকলাপ পরিবর্তনগুলি অক্ষম করুন । মন্তব্যের পরে নীচের কোড যোগ করুন.
// TODO: Disable activity transitions when user leaves the app.
if (activityTrackingEnabled) {
disableActivityTransitions();
}
এটি কার্যকলাপ পরিবর্তনের পরিবর্তনগুলি ট্র্যাক করার জন্য। এখন আমাদের শুধু আপডেটগুলো প্রক্রিয়া করতে হবে।
7. ইভেন্ট প্রক্রিয়াকরণ
যখন অনুরোধ করা কার্যকলাপ স্থানান্তর ঘটে, তখন আপনার অ্যাপ একটি ইন্টেন্ট কলব্যাক পায়। একটি ActivityTransitionResult অবজেক্ট ইন্টেন্ট থেকে বের করা যেতে পারে, যার মধ্যে ActivityTransitionEvent অবজেক্টের একটি তালিকা রয়েছে। ইভেন্টগুলি কালানুক্রমিক ক্রমে সাজানো হয়, উদাহরণস্বরূপ, যদি কোনো অ্যাপ ACTIVITY_TRANSITION_ENTER এবং ACTIVITY_TRANSITION_EXIT ট্রানজিশনে IN_VEHICLE অ্যাক্টিভিটি টাইপের জন্য অনুরোধ করে, তাহলে ব্যবহারকারী যখন ড্রাইভিং শুরু করেন তখন এটি একটি ActivityTransitionEvent অবজেক্ট পায় এবং অন্যটি যখন ব্যবহারকারী অন্য কোনো অ্যাক্টিভিটিতে স্থানান্তরিত হয়।
আসুন সেই ইভেন্টগুলি পরিচালনা করার জন্য কোড যোগ করি।
base
মডিউলে, TODO-এর জন্য অনুসন্ধান করুন: আমরা আগে তৈরি করা BroadcastReceiver-এর onReceive()
এ 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
-এ রূপান্তর করবে এবং স্ক্রীনে মুদ্রণ করবে।
এটা, আপনি শেষ! অ্যাপটি চালানোর চেষ্টা করুন।
গুরুত্বপূর্ণ দ্রষ্টব্য: এমুলেটরে কার্যকলাপ পরিবর্তনগুলি পুনরুত্পাদন করা কঠিন, তাই আমরা একটি শারীরিক ডিভাইস ব্যবহার করার পরামর্শ দিই৷
আপনি কার্যকলাপ পরিবর্তন ট্র্যাক করতে সক্ষম হওয়া উচিত.
সেরা ফলাফলের জন্য, একটি শারীরিক ডিভাইসে অ্যাপটি ইনস্টল করুন এবং ঘুরে বেড়ান। :)
8. কোডটি পর্যালোচনা করুন
আপনি একটি সাধারণ অ্যাপ তৈরি করেছেন যা অ্যাক্টিভিটি ট্রানজিশন ট্র্যাক করে এবং সেগুলিকে স্ক্রিনে তালিকাভুক্ত করে৷
আপনি যা করেছেন তা পর্যালোচনা করতে এবং এটি কীভাবে একসাথে কাজ করে তার আরও ভাল ধারণা পেতে কোডটি সম্পূর্ণরূপে পড়তে বিনা দ্বিধায়।