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

ইনটেন্ট ফিল্টার সংয়োজন (এ্যাড) করা

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

সিস্টেমটি একটি একটিভিটিতে একটি নির্দিষ্ট Intent সেন্ড করতে পারে যদি ওই একটিভিটির একটি ইনটেন্ট ফিল্টার থাকে যা Intent অবজেক্টের নিম্নোক্ত বৈশিষ্টগুলো পূর্ণ করে:

একশন

একটি স্ট্রিং পরিচালনা করতে একশনের নামকরন করে। সাধারনত প্লাটফর্ম-নির্ধারিত ভ্যালু যেমন ACTION SEND বা ACTION VIEW ।

< action> এলিমেন্ট দিয়ে আপনার ইনটেন্ট ফিল্টারে এটা সুনির্দিষ্ট করুন। ভ্যালুটি যেটা আপনি এই এলিমেন্টে সুনির্দিষ্ট করেছেন তা অবশ্যই একশনের জন্য পূর্ণ স্ট্রিং নেম হবে, এপিআই কনসটেন্ট এর পরিবর্তে (নীচের উদাহরণ দেখুন)

ডাটা

ইনটেন্টের সাথে সংযুক্ত ডাটার একটি বর্ণনা।

এলিমেন্ট দিয়ে আপনার ইনটেন্ট ফিল্টারে এটা সুনির্দিষ্ট করুন। এই এলিমেন্টে এক বা একাধিক এট্রিবিউট ব্যবহার করতে, আপনি শুধু একটি MIME টাইপ, শুধু একটি ইউআরআই প্রিফিক্স, শুধু একটি ইউআরআই স্কিম সুনির্দিষ্ট করতে পারেন বা এগুলার সমন্বয় এবং অন্যান্য যা গ্রহন করা ডাটা টাইপ নির্দেশ করে।

নোট: যদি ডাটা Uri সম্পর্কে আপনার সুনির্দিষ্ট ডিক্লেয়ারের দরকার না হয় (যেমন যখন আপনার একটিভিটি অন্য ধরনের “এক্সট্রা” ডাটা হ্যান্ডল করে, একটি ইউআরআই এর পরিবর্তে), আপনার একটিভিটির হ্যান্ডেল করা ডাটার ধরনের ডিক্লেয়ার করতে আপনার শুধু android:mimeType এট্রিবিউটটি সুনির্দিষ্ট করা উচিত, যেমন text/plain or image/jpeg

ক্যাটাগরি

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

এটা < category>এলিমেন্ট দিয়ে আপনার ইনটেন্ট ফিল্টারে চিহ্নিত করুন।

আপনার ইনটেন্ট ফিল্টারে, < intent-filter>এলিমেন্টে থাকা সমগোত্রিয় এক্সএমএল এলিমেন্ট দিয়ে তাদের প্রতিটা ডিক্লেয়ার করার মাধ্যমে আপনার একটিভিটি কোন মানদন্ড গ্রহণ করে তা আপনি ডিক্লেয়ার করতে পারেন।

উদাহরণস্বরূপ, এখানে একটি ইনটেন্ট ফিল্টার সহ একটি একটিভিটি যা ACTION SEND ইনটেন্ট পরিচালিত করে যখন ডাটা টাইপ হয়, টেক্সট বা ইমেজ হয়:

<activity android:name="ShareActivity">
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="text/plain"/>
        <data android:mimeType="image/*"/>
    </intent-filter>
</activity>

প্রতিটা প্রবেশোদ্যত ইনটেন্ট শুধুমাত্র একটি একশন এবং একটি ডাটা টাইপ সুনির্দিষ্ট করে, কিন্তু প্রতিটা < intent-filter> এর মধ্যে < action>, < category> এবং < data>এলিমেন্টের মাল্টিপল ইনসটেন্স করতে এটা ঠিক আছে।

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

উদাহরণস্বরূপ, মনে করুন আপনার একটিভিটি ACTION SEND এবং ACTION SENDTO ইনটেন্টের উভয়ের জন্য টেক্সট এবং ইমেজ উভয়ই পরিচালনা করে। এই ক্ষেত্রে আপনাকে অবশ্যই দুইটা একশনের জন্যে দুইটা আলাদা ইনটেন্ট নির্ধারন করতে হবে কারন send বা sendto ইউআরআই স্কিম ব্যবহার করে গ্রাহকের ঠিকানা সুনির্দিষ্ট করতে একটি ACTION SENDTO ইনটেন্টের অবশ্যই ডাটা Uriব্যবহার করা। উদাহরণস্বরূপ:

<activity android:name="ShareActivity">
    <!-- filter for sending text; accepts SENDTO action with sms URI schemes -->
    <intent-filter>
        <action android:name="android.intent.action.SENDTO"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="sms" />
        <data android:scheme="smsto" />
    </intent-filter>
    <!-- filter for sending text or images; accepts SEND action and text or image data -->
    <intent-filter>
        <action android:name="android.intent.action.SEND"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="image/*"/>
        <data android:mimeType="text/plain"/>
    </intent-filter>
</activity>

নোট: ইমপ্লিসিট ইনটেন্ট গ্রহণ করার জন্য, আপনাকে অবশ্যই ইনটেন্ট ফিল্টারে CATEGORY DEFAULT ক্যাটাগরি অন্তর্ভূক্ত করতে হবে। মেথড startActivity()এবং startActivityForResult() সকল ইনটেন্ট এর ব্যবহার করে যেন তারা CATEGORY DEFAULT ক্যাটাগরি ধারণ করে। আপনি যদি এটা ডিক্লেয়ার না করেন, কোন ইমপ্লিসিট ইনটেন্ট আপনার একটিভিটি নির্ধারন করবে না।

ACTION SEND ইনটেন্ট যা সামজিক শেয়ার আচরণ সেন্ড এবং রিসিভ করে সে সম্পর্কে আরও তথ্যের জন্য, Receiving Simple Data from Other Apps সম্পর্কে অনুশীলনীটি দেখুন।