একটি বিজ্ঞপ্তি থেকে একটি কার্যকলাপ শুরু করুন

আপনি যখন একটি বিজ্ঞপ্তি থেকে একটি কার্যকলাপ শুরু করেন, আপনাকে অবশ্যই ব্যবহারকারীর প্রত্যাশিত নেভিগেশন অভিজ্ঞতা সংরক্ষণ করতে হবে। ব্যাক বোতামে আলতো চাপলে অবশ্যই ব্যবহারকারীকে অ্যাপের স্বাভাবিক কাজের প্রবাহের মাধ্যমে হোম স্ক্রিনে ফিরিয়ে আনতে হবে এবং সাম্প্রতিক স্ক্রিনটি খুললে কার্যকলাপটিকে একটি পৃথক কাজ হিসাবে দেখাতে হবে। এই নেভিগেশন অভিজ্ঞতা সংরক্ষণ করতে, একটি নতুন টাস্কে কার্যকলাপ শুরু করুন।

আপনার বিজ্ঞপ্তির জন্য ট্যাপ আচরণ সেট করার প্রাথমিক পদ্ধতিটি একটি মৌলিক বিজ্ঞপ্তি তৈরি করুন এ বর্ণনা করা হয়েছে। এই পৃষ্ঠাটি বর্ণনা করে কিভাবে আপনার বিজ্ঞপ্তির কর্মের জন্য একটি PendingIntent সেট আপ করতে হয় যাতে এটি একটি নতুন টাস্ক এবং ব্যাক স্ট্যাক তৈরি করে। আপনি এটি কীভাবে করবেন তা নির্ভর করে আপনি কোন ধরনের কার্যকলাপ শুরু করছেন তার উপর:

নিয়মিত কার্যকলাপ
এটি এমন একটি কার্যকলাপ যা আপনার অ্যাপের স্বাভাবিক UX প্রবাহের অংশ হিসেবে বিদ্যমান। ব্যবহারকারী যখন বিজ্ঞপ্তি থেকে অ্যাক্টিভিটিতে আসে, তখন নতুন টাস্কে অবশ্যই একটি সম্পূর্ণ ব্যাক স্ট্যাক অন্তর্ভুক্ত করতে হবে, ব্যবহারকারীকে অ্যাপের ক্রমানুসারে নেভিগেট করতে ব্যাক বোতামে ট্যাপ করতে দেয়।
বিশেষ কার্যকলাপ
ব্যবহারকারী শুধুমাত্র এই কার্যকলাপটি দেখেন যদি এটি একটি বিজ্ঞপ্তি থেকে শুরু হয়৷ এক অর্থে, এই ক্রিয়াকলাপটি বিজ্ঞপ্তি UI কে প্রসারিত করে এমন তথ্য প্রদান করে যা বিজ্ঞপ্তিতে প্রদর্শন করা কঠিন। এই কার্যকলাপ একটি ব্যাক স্ট্যাক প্রয়োজন নেই.

একটি নিয়মিত কার্যকলাপ PendingIntent সেট আপ করুন

আপনার বিজ্ঞপ্তি থেকে একটি নিয়মিত কার্যকলাপ শুরু করতে, TaskStackBuilder ব্যবহার করে PendingIntent সেট আপ করুন যাতে এটি নিম্নরূপ একটি নতুন ব্যাক স্ট্যাক তৈরি করে।

আপনার অ্যাপের কার্যকলাপের শ্রেণিবিন্যাস সংজ্ঞায়িত করুন

আপনার অ্যাপ্লিকেশান ম্যানিফেস্ট ফাইলের প্রতিটি <activity> উপাদানে android:parentActivityName অ্যাট্রিবিউট যোগ করে আপনার কার্যকলাপের জন্য প্রাকৃতিক শ্রেণিবিন্যাস সংজ্ঞায়িত করুন। নিম্নলিখিত উদাহরণ দেখুন:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!-- MainActivity is the parent for ResultActivity. -->
<activity
    android:name=".ResultActivity"
    android:parentActivityName=".MainActivity" />
    ...
</activity>

একটি ব্যাক স্ট্যাক দিয়ে একটি PendingIntent তৈরি করুন

ক্রিয়াকলাপগুলির একটি ব্যাক স্ট্যাক অন্তর্ভুক্ত এমন একটি ক্রিয়াকলাপ শুরু করতে, TaskStackBuilder এর একটি উদাহরণ তৈরি করুন এবং addNextIntentWithParentStack() কল করুন, আপনি যে কার্যকলাপটি শুরু করতে চান তার Intent এটি পাস করুন৷

যতক্ষণ আপনি পূর্বে বর্ণিত প্রতিটি কার্যকলাপের জন্য অভিভাবক কার্যকলাপ সংজ্ঞায়িত করেন, আপনি একটি PendingIntent পেতে getPendingIntent() কল করতে পারেন যাতে পুরো ব্যাক স্ট্যাক অন্তর্ভুক্ত থাকে।

কোটলিন

// Create an Intent for the activity you want to start.
val resultIntent = Intent(this, ResultActivity::class.java)
// Create the TaskStackBuilder.
val resultPendingIntent: PendingIntent? = TaskStackBuilder.create(this).run {
    // Add the intent, which inflates the back stack.
    addNextIntentWithParentStack(resultIntent)
    // Get the PendingIntent containing the entire back stack.
    getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
}

জাভা

// Create an Intent for the activity you want to start.
Intent resultIntent = new Intent(this, ResultActivity.class);
// Create the TaskStackBuilder and add the intent, which inflates the back
// stack.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addNextIntentWithParentStack(resultIntent);
// Get the PendingIntent containing the entire back stack.
PendingIntent resultPendingIntent =
        stackBuilder.getPendingIntent(0,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);

প্রয়োজনে, আপনি TaskStackBuilder.editIntentAt() কল করে স্ট্যাকের Intent অবজেক্টে আর্গুমেন্ট যোগ করতে পারেন। ব্যবহারকারী যখন নেভিগেট করে তখন ব্যাক স্ট্যাকের একটি কার্যকলাপ অর্থপূর্ণ ডেটা প্রদর্শন করে তা নিশ্চিত করার জন্য এটি কখনও কখনও প্রয়োজনীয়।

তারপরে আপনি যথারীতি বিজ্ঞপ্তিতে PendingIntent পাস করতে পারেন:

কোটলিন

val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
    setContentIntent(resultPendingIntent)
    ...
}
with(NotificationManagerCompat.from(this)) {
    notify(NOTIFICATION_ID, builder.build())
}

জাভা

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
builder.setContentIntent(resultPendingIntent);
...
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(NOTIFICATION_ID, builder.build());

একটি বিশেষ কার্যকলাপ PendingIntent সেট আপ করুন

যেহেতু একটি বিশেষ ক্রিয়াকলাপ যা একটি বিজ্ঞপ্তি থেকে শুরু হয় তার জন্য একটি ব্যাক স্ট্যাকের প্রয়োজন হয় না, আপনি getActivity() কল করে PendingIntent তৈরি করতে পারেন। যাইহোক, ম্যানিফেস্টে উপযুক্ত টাস্ক বিকল্পগুলি সংজ্ঞায়িত করুন৷

  1. আপনার ম্যানিফেস্টে, <activity> উপাদানে নিম্নলিখিত বৈশিষ্ট্যগুলি যোগ করুন।
    android:taskAffinity =""
    আপনি কোডে যে FLAG_ACTIVITY_NEW_TASK পতাকা ব্যবহার করেন তার সাথে মিলিত, এই অ্যাট্রিবিউটটি ফাঁকা সেট করুন যাতে এই কার্যকলাপটি অ্যাপের ডিফল্ট টাস্কে না যায়। অ্যাপের ডিফল্ট অ্যাফিনিটি আছে এমন কোনো বিদ্যমান কাজ প্রভাবিত হয় না।
    android:excludeFromRecents ="true"
    সাম্প্রতিক স্ক্রীন থেকে নতুন টাস্ক বাদ দেয় যাতে ব্যবহারকারী ভুলবশত এটিতে ফিরে যেতে না পারে।

    এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    <activity
        android:name=".ResultActivity"
        android:launchMode="singleTask"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    </activity>
    
  2. বিজ্ঞপ্তি তৈরি করুন এবং জারি করুন:
    1. একটি Intent তৈরি করুন যা Activity শুরু করে।
    2. ফ্ল্যাগ FLAG_ACTIVITY_NEW_TASK এবং FLAG_ACTIVITY_CLEAR_TASK সহ setFlags() কল করে একটি নতুন, খালি কাজ শুরু করতে Activity সেট করুন।
    3. getActivity() কল করে একটি PendingIntent তৈরি করুন।

    এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    কোটলিন

    val notifyIntent = Intent(this, ResultActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }
    val notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )
    

    জাভা

    Intent notifyIntent = new Intent(this, ResultActivity.class);
    // Set the Activity to start in a new, empty task.
    notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                        | Intent.FLAG_ACTIVITY_CLEAR_TASK);
    // Create the PendingIntent.
    PendingIntent notifyPendingIntent = PendingIntent.getActivity(
            this, 0, notifyIntent,
            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
    );
    
  3. যথারীতি বিজ্ঞপ্তিতে PendingIntent পাস করুন:

    কোটলিন

    val builder = NotificationCompat.Builder(this, CHANNEL_ID).apply {
        setContentIntent(notifyPendingIntent)
        ...
    }
    with(NotificationManagerCompat.from(this)) {
        notify(NOTIFICATION_ID, builder.build())
    }
    

    জাভা

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID);
    builder.setContentIntent(notifyPendingIntent);
    ...
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(NOTIFICATION_ID, builder.build());
    

বিভিন্ন টাস্ক অপশন এবং ব্যাক স্ট্যাক কীভাবে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, টাস্ক এবং ব্যাক স্ট্যাক দেখুন।