<পরিষেবা>

সিনট্যাক্স:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
এর মধ্যে অন্তর্ভুক্ত:
<application>
এতে থাকতে পারে:
<intent-filter>
<meta-data>
<property>
বর্ণনা:
অ্যাপ্লিকেশনটির একটি কম্পোনেন্ট হিসেবে একটি সার্ভিস বা Service সাবক্লাসকে ঘোষণা করে। অ্যাক্টিভিটির মতো নয়, সার্ভিসগুলোর কোনো ভিজ্যুয়াল ইউজার ইন্টারফেস নেই। এগুলো দীর্ঘস্থায়ী ব্যাকগ্রাউন্ড অপারেশন অথবা একটি সমৃদ্ধ কমিউনিকেশনস এপিআই বাস্তবায়নের জন্য ব্যবহৃত হয়, যা অন্য অ্যাপ্লিকেশন দ্বারা কল করা যেতে পারে।

ম্যানিফেস্ট ফাইলে সমস্ত সার্ভিসকে অবশ্যই <service> এলিমেন্ট দ্বারা উপস্থাপন করতে হবে। যেগুলো সেখানে ঘোষিত নয়, সেগুলো সিস্টেম দেখতে পায় না এবং কখনো চলে না।

দ্রষ্টব্য: অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এবং এর পরবর্তী সংস্করণগুলোতে, আপনার অ্যাপ ব্যাকগ্রাউন্ডে চলার সময় সিস্টেম এর কার্যকলাপের উপর সীমাবদ্ধতা আরোপ করে। আরও তথ্যের জন্য, ব্যাকগ্রাউন্ড এক্সিকিউশন লিমিট এবং ব্যাকগ্রাউন্ড লোকেশন লিমিট নিয়ে আলোচনা করা গাইডগুলো দেখুন।

বৈশিষ্ট্য:
android:description
একটি ব্যবহারকারী-পাঠযোগ্য স্ট্রিং যা পরিষেবাটির বর্ণনা দেয়। বর্ণনাটি একটি স্ট্রিং রিসোর্সের রেফারেন্স হিসাবে সেট করা হয়, যাতে এটিকে ইউজার ইন্টারফেসের অন্যান্য স্ট্রিংয়ের মতো স্থানীয়করণ করা যায়।
android:directBootAware

সার্ভিসটি ডিরেক্ট-বুট সচেতন কিনা, অর্থাৎ, ব্যবহারকারী ডিভাইসটি আনলক করার আগেই এটি চলতে পারে কিনা।

দ্রষ্টব্য: ডাইরেক্ট বুট চলাকালীন, আপনার অ্যাপ্লিকেশনের কোনো সার্ভিস শুধুমাত্র ডিভাইস প্রোটেক্টেড স্টোরেজে সংরক্ষিত ডেটা অ্যাক্সেস করতে পারবে।

ডিফল্ট মান হলো "false"

android:enabled
সিস্টেম দ্বারা সার্ভিসটি ইনস্ট্যানশিয়েট করা যাবে কিনা। যদি করা যায় তবে এর মান "true" , এবং না গেলে "false" । ডিফল্ট মান হলো "true"

<application> এলিমেন্টের নিজস্ব একটি enabled অ্যাট্রিবিউট আছে যা সার্ভিস সহ অ্যাপ্লিকেশনের সমস্ত কম্পোনেন্টের ক্ষেত্রে প্রযোজ্য। সার্ভিসটি এনাবলড হওয়ার জন্য <application> এবং <service> অ্যাট্রিবিউট দুটিকেই "true" হতে হবে, কারণ ডিফল্টভাবে দুটিই "true" থাকে। যদি এর কোনো একটি "false" হয়, তাহলে সার্ভিসটি ডিসেবলড হয়ে যায় এবং ইনস্ট্যানশিয়েট করা যায় না।

android:exported
অন্যান্য অ্যাপ্লিকেশনের কম্পোনেন্টগুলো সার্ভিসটি কল করতে বা এর সাথে ইন্টারঅ্যাক্ট করতে পারবে কিনা। পারলে এর মান "true" হবে, আর না পারলে "false" হবে। যখন মানটি "false" হয়, তখন শুধুমাত্র একই অ্যাপ্লিকেশনের কম্পোনেন্টগুলো অথবা একই ইউজার আইডিযুক্ত অ্যাপ্লিকেশনগুলোই সার্ভিসটি চালু করতে বা এর সাথে বাইন্ড করতে পারে।

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

অন্যান্য অ্যাপ্লিকেশনের কাছে কোনো সার্ভিসের প্রবেশাধিকার সীমিত করার জন্য এই অ্যাট্রিবিউটটিই একমাত্র উপায় নয়। সার্ভিসের সাথে যোগাযোগ করতে পারে এমন বাহ্যিক সত্তাগুলোকে সীমিত করার জন্য আপনি পারমিশনও ব্যবহার করতে পারেন। permission অ্যাট্রিবিউটটি দেখুন।

android:foregroundServiceType

এটি নির্দেশ করে যে সার্ভিসটি একটি ফোরগ্রাউন্ড সার্ভিস যা একটি নির্দিষ্ট ব্যবহারের ক্ষেত্র (use case) পূরণ করে। উদাহরণস্বরূপ, "location" ফোরগ্রাউন্ড সার্ভিস টাইপটি নির্দেশ করে যে একটি অ্যাপ ডিভাইসের বর্তমান অবস্থান সংগ্রহ করছে, সাধারণত ডিভাইসের অবস্থান সম্পর্কিত ব্যবহারকারী-প্রবর্তিত কোনো কাজ চালিয়ে যাওয়ার জন্য।

আপনি একটি নির্দিষ্ট সার্ভিসে একাধিক ফোরগ্রাউন্ড সার্ভিস টাইপ নির্ধারণ করতে পারেন।

android:icon

পরিষেবাটির প্রতিনিধিত্বকারী একটি আইকন। এই অ্যাট্রিবিউটটি একটি ড্রয়েবল রিসোর্সের রেফারেন্স হিসেবে সেট করা হয়, যেখানে ছবিটির সংজ্ঞা থাকে। যদি এটি সেট করা না থাকে, তবে এর পরিবর্তে সম্পূর্ণ অ্যাপ্লিকেশনটির জন্য নির্দিষ্ট আইকনটি ব্যবহৃত হয়। <application> এলিমেন্টের icon অ্যাট্রিবিউটটি দেখুন।

সার্ভিসটির আইকন, তা এখানে সেট করা হোক বা <application> এলিমেন্টের মাধ্যমে সেট করা হোক, সেটিই সার্ভিসটির সমস্ত ইন্টেন্ট ফিল্টারের ডিফল্ট আইকন হিসেবেও কাজ করে। <intent-filter> এলিমেন্টের icon অ্যাট্রিবিউটটি দেখুন।

android:intentMatchingFlags

সিস্টেম কীভাবে আগত ইনটেন্টগুলোকে অ্যাপ কম্পোনেন্টগুলোর সাথে মেলাবে, তা সূক্ষ্মভাবে নিয়ন্ত্রণ করতে এই অ্যাট্রিবিউটটি ব্যবহার করুন। ডিফল্টরূপে, কোনো বিশেষ মেলানোর নিয়ম প্রয়োগ করা হয় না।

<service> ট্যাগে সেট করা মান <application> ট্যাগে সেট করা মানকে বাতিল করে দেয়।

মানটি অবশ্যই নিম্নলিখিত ফ্ল্যাগগুলির এক বা একাধিক হতে হবে, যা ' | ' দ্বারা পৃথক করা থাকবে:

পতাকা বর্ণনা
none আগত ইন্টেন্টগুলির জন্য সমস্ত বিশেষ ম্যাচিং নিয়ম নিষ্ক্রিয় করে। একাধিক ফ্ল্যাগ নির্দিষ্ট করার সময়, সাংঘর্ষিক মানগুলির সমাধান করার জন্য none ' ফ্ল্যাগটিকে অগ্রাধিকার দেওয়া হয়।
enforceIntentFilter

আগত ইন্টেন্টগুলির জন্য আরও কঠোর মিলকরণ প্রয়োগ করে:

  • সুস্পষ্ট ইনটেন্ট অবশ্যই টার্গেট কম্পোনেন্টের ইনটেন্ট ফিল্টারের সাথে মিলতে হবে।
  • অ্যাকশনবিহীন ইনটেন্টগুলো কোনো ইনটেন্ট ফিল্টারের সাথে মেলে না।
allowNullAction

অ্যাকশনবিহীন ইনটেন্টগুলোকেও ম্যাচ করার অনুমতি দিতে ম্যাচিং নিয়ম শিথিল করে। নিম্নলিখিত আচরণটি অর্জনের জন্য এই ফ্ল্যাগটি enforceIntentFilter সাথে একত্রে ব্যবহৃত হয়:

  • সুস্পষ্ট ইনটেন্ট অবশ্যই টার্গেট কম্পোনেন্টের ইনটেন্ট ফিল্টারের সাথে মিলতে হবে।
  • অ্যাকশনবিহীন ইনটেন্টগুলো যেকোনো ইনটেন্ট ফিল্টারের সাথে মেলানো যেতে পারে।

আরও তথ্যের জন্য, Android 16 (API লেভেল 36)-এর আচরণগত পরিবর্তন সম্পর্কিত Safer Intents বিভাগটি দেখুন।

android:isolatedProcess
"true" সেট করা হলে, এই সার্ভিসটি একটি বিশেষ প্রসেসের অধীনে চলে যা সিস্টেমের বাকি অংশ থেকে বিচ্ছিন্ন থাকে এবং এর নিজস্ব কোনো অনুমতি থাকে না। বাইন্ডিং এবং স্টার্ট করার জন্য শুধুমাত্র সার্ভিস এপিআই (Service API) ব্যবহার করা হয়।
android:label
সার্ভিসটির জন্য একটি ব্যবহারকারী-পঠ্য নাম। যদি এই অ্যাট্রিবিউটটি সেট করা না থাকে, তবে এর পরিবর্তে সম্পূর্ণ অ্যাপ্লিকেশনটির জন্য সেট করা লেবেলটি ব্যবহৃত হয়। <application> এলিমেন্টের label অ্যাট্রিবিউটটি দেখুন।

সার্ভিসটির লেবেল, তা এখানে সেট করা হোক বা <application> এলিমেন্টের মাধ্যমে সেট করা হোক, সেটিই সার্ভিসটির সমস্ত ইন্টেন্ট ফিল্টারের ডিফল্ট লেবেল হিসেবেও কাজ করে। <intent-filter> এলিমেন্টের label অ্যাট্রিবিউটটি দেখুন।

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

android:name
Service সাবক্লাসের নাম যা সার্ভিসটি ইমপ্লিমেন্ট করে। এটি একটি সম্পূর্ণ কোয়ালিফাইড ক্লাস নেম, যেমন "com.example.project.RoomService" । তবে, সংক্ষিপ্ত রূপ হিসেবে, যদি নামের প্রথম অক্ষরটি একটি পিরিয়ড ".RoomService" হয়, তাহলে সেটি <manifest> এলিমেন্টে নির্দিষ্ট করা প্যাকেজ নামের সাথে যুক্ত করা হয়।

একবার আপনার অ্যাপ্লিকেশনটি প্রকাশ করার পর, android:exported ="false" সেট না করা পর্যন্ত এই নামটি পরিবর্তন করবেন না

কোনো পূর্বনির্ধারিত নাম নেই। নামটি অবশ্যই উল্লেখ করতে হবে।

android:permission
একটি সার্ভিস চালু করতে বা এর সাথে যুক্ত হতে কোনো এনটিটির যে পারমিশনটি প্রয়োজন, এটি তার নাম। যদি startService() , bindService() , বা stopService() কলকারীকে এই পারমিশনটি দেওয়া না থাকে, তাহলে মেথডটি কাজ করে না এবং Intent অবজেক্টটি সার্ভিসে পাঠানো হয় না।

যদি এই অ্যাট্রিবিউটটি সেট করা না থাকে, তাহলে <application> এলিমেন্টের permission অ্যাট্রিবিউট দ্বারা নির্ধারিত অনুমতিটি সার্ভিসটির ক্ষেত্রে প্রযোজ্য হয়। যদি কোনো অ্যাট্রিবিউটই সেট করা না থাকে, তাহলে সার্ভিসটি কোনো অনুমতি দ্বারা সুরক্ষিত থাকে না।

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

android:process
যে প্রসেসে সার্ভিসটি চলে, তার নাম। সাধারণত, একটি অ্যাপ্লিকেশনের সমস্ত কম্পোনেন্ট অ্যাপ্লিকেশনটির জন্য তৈরি ডিফল্ট প্রসেসে চলে। এর নাম অ্যাপ্লিকেশন প্যাকেজের নামের মতোই হয়। <application> এলিমেন্টের process অ্যাট্রিবিউট সমস্ত কম্পোনেন্টের জন্য একটি ভিন্ন ডিফল্ট সেট করতে পারে। কিন্তু একটি কম্পোনেন্ট তার নিজস্ব process অ্যাট্রিবিউটের মাধ্যমে ডিফল্টটিকে ওভাররাইড করতে পারে, যা আপনাকে আপনার অ্যাপ্লিকেশনকে একাধিক প্রসেসে ছড়িয়ে দেওয়ার সুযোগ দেয়।

এই অ্যাট্রিবিউটে নির্ধারিত নামটি যদি কোলন ( : দিয়ে শুরু হয়, তাহলে প্রয়োজনের সময় অ্যাপ্লিকেশনটির নিজস্ব একটি নতুন প্রসেস তৈরি করা হয় এবং সার্ভিসটি সেই প্রসেসে চলে।

যদি প্রসেসের নামটি ছোট হাতের অক্ষর দিয়ে শুরু হয়, তবে সার্ভিসটি সেই নামের একটি গ্লোবাল প্রসেসে চলে, যদি তার সেই অনুমতি থাকে। এর ফলে বিভিন্ন অ্যাপ্লিকেশনের কম্পোনেন্টগুলো একটি প্রসেস শেয়ার করতে পারে, যা রিসোর্স ব্যবহার কমিয়ে দেয়।

android:stopWithTask
"true" তে সেট করা হলে, ব্যবহারকারী যখন অ্যাপটির মালিকানাধীন কোনো অ্যাক্টিভিটির সাথে যুক্ত টাস্ক মুছে ফেলেন, তখন সিস্টেম স্বয়ংক্রিয়ভাবে সার্ভিসটি বন্ধ করে দেয়। এর ডিফল্ট মান হলো "false"
আরও দেখুন:
<application>
<activity>
এতে প্রবর্তন করা হয়েছিল:
এপিআই স্তর ১