বাংলায় অ্যান্ড্রয়েড সহায়িকা - Bangla Android Guide

ডিপ লিংকের জন্য একটি নতুন ব্যাক স্ট্যাক সংশ্লেষণ করা

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

উদারহরণ হিসাবে বলা যায়, যখন একটি নোটিফিকেশন ইউজারকে আপনার অ্যাপ হায়ারারকির গভীরে একটি একটিভিটিতে নিয়ে যায়, আপনার উচিত আপনার টাস্কের ব্যাক স্ট্যাকের মধ্যে একটিভিটিগুলো যোগ করা যাতে ব্যাক প্রেস করা অ্যাপ পরিত্যাগ করার পরিবর্তে অ্যাপ হায়ারারকি নেভিগেট করে। এই প্যাটার্ন Navigation (http://developer.android.com/design/patterns/navigation.html) ডিজাইন গাইডে আরও বিস্তারিতভাবে আলোচনা করা হয়েছে।

মেনিফেস্টে প্যারেন্ট একটিভিটি নির্দিষ্ট করা

অ্যান্ড্রয়েড ৪.১ (এপিআই লেভেল ১৬) এ শুরু করাতে, আপনি < activity> এলিমেন্টে android:parentActivityName এট্রিবিউট সুনির্দিষ্ট করার মাধ্যমে প্রতিটা একটিভিটির লজিক্যাল প্যারেন্ট ডিক্লেয়ার করতে পারেন। এটা সিস্টেমকে নেভিগেশন প্যাটার্ন সহজতর করতে দেয় কারন এটা এই তথ্য দিয়ে লজিক্যাল ব্যাক বা আপ নেভিগেশন পাথ নির্ধারণ করতে পারে।

যদি আপনার অ্যাপ অ্যান্ড্রয়েড ৪.০ বা তার নীচের সংস্করণ সাপোর্ট করতে পারে, আপনার অ্যাপের সাথে Support Library যোগ করুন এবং < activity>এর মধ্যে একটি < meta-data> এলিমেন্ট যোগ করুন। এরপর android.support.PARENT_ACTIVITY এর জন্য ভ্যালু হিসাবে প্যারেন্ট একটিভিটি নির্দিষ্ট করুন, যা android:parentActivityName এট্রিবিউট ম্যাচ করে।

উদাহরণস্বরূপ:

<application ... >
    ...
    <!-- The main/home activity (it has no parent activity) -->
    <activity
        android:name="com.example.myfirstapp.MainActivity" ...>
        ...
    </activity>
    <!-- A child of the main activity -->
    <activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
        <!-- The meta-data element is needed for versions lower than 4.1 -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.myfirstapp.MainActivity" />
    </activity>
</application>

প্যারেন্ট একটিভিটি দিয়ে এই উপায় ডিক্লেয়ার করায়, প্রতিটা একটিভিটির জন্য কোন প্যারেন্ট একটিভিটি যথাযথ তা চিহ্নিত করার মাধ্যমে একটি নতুন ব্যাক স্ট্যাক সংশ্লেষণ করতে আপনি NavUtils APIs ব্যবহার করতে পারেন।

একটিভিটি শুরু করার সময় ব্যাক স্ট্যাক তৈরী করুন

ব্যাক স্ট্যাকে একটিভিটি যোগ করা ইভেন্ট শুরু করে যা ইউজারকে আপনার অ্যাপের মধ্যে নিয়ে যায়। তা হচ্ছে, startActivity()কল করার পরিবর্তে , প্রতিটা একটিভিটি নির্ধারণ করতে TaskStackBuilder APIs ব্যবহার করুন যা একটি নতুন ব্যাক স্ট্যাকের মধ্যে স্থাপিত হতে পারে। তারপর startActivities()কল করার মাধ্যমে অভিষ্ট একটিভিটি শুরু করুন বা getPendingIntent() কল করার মাধ্যমে যথাযথ PendingIntent তৈরী করুন।

উদাহরণস্বরূপ, যখন একটি নোটিপিকেশন ইউজারকে আপনার অ্যাপ হায়ারারকির গভীর একটি একটিভিটির মধ্যে নিয়ে যায়, একটি PendingIntent তৈরী করতে আপনি এই কোড ব্যবহার করতে পারেন যা একটি একটিভিটি শুরু করে এবং অভিষ্ট টাস্কের মধ্যে একটি নতুন ব্যাক স্ট্যাক প্রবেশ করায়।

// Intent for the activity to open when user selects the notification
Intent detailsIntent = new Intent(this, DetailsActivity.class);

// Use TaskStackBuilder to build the back stack and get the PendingIntent
PendingIntent pendingIntent =
        TaskStackBuilder.create(this)
                        // add all of DetailsActivity's parents to the stack,
                        // followed by DetailsActivity itself
                        .addNextIntentWithParentStack(upIntent)
                        .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setContentIntent(pendingIntent);
...

প্রাপ্ত PendingIntent শুধুমাত্র শুরু করাএকটিভিটি নির্দিষ্টই করে না (যেভাবে detailsIntent কর্তৃক নির্ধারিত হয়েছে)বরং ব্যাক স্ট্যাকও নির্দিষ্ট করে যা টাস্কের (detailsIntent কর্তৃক নির্ধারিত DetailsActivity এর সকল প্যারেন্ট) মধ্যে প্রবেশ করানো উচিত। সুতরাং যখন DetailsActivity শুরু হয়, ব্যাক প্রেস করা ব্যাকওয়ার্ড (পিছন দিকে যাওয়া) নেভিগেট করে প্রতিটা DetailsActivity ক্লাসের প্যারেন্ট একটিভিটি ব্যাপি।

নোট: addNextIntentWithParentStack()পদ্ধতিতে কাজ করার জন্য, আপনাকে অবশ্যই android:parentActivityName ঘধসব এট্রিবিউট (এবং সমরূপ < meta-data> এলিমেন্ট) ব্যহার আপনার মেনিফেস্ট ফাইলের প্রতিটা একটিভিটির লজিক্যাল প্যারেন্ট ডিক্লেয়ার করতে হবে যেভাবে উপরে আলোচনা করা হয়েছে।