<প্রদানকারী>

সিনট্যাক্স:
<provider android:authorities="list"
          android:directBootAware=["true" | "false"]
          android:enabled=["true" | "false"]
          android:exported=["true" | "false"]
          android:grantUriPermissions=["true" | "false"]
          android:icon="drawable resource"
          android:initOrder="integer"
          android:label="string resource"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:permission="string"
          android:process="string"
          android:readPermission="string"
          android:syncable=["true" | "false"]
          android:writePermission="string" >
    ...
</provider>
এর মধ্যে অন্তর্ভুক্ত:
<application>
এতে থাকতে পারে:
<meta-data>
<grant-uri-permission>
<intent-filter>
<path-permission>
<property>
বর্ণনা:
একটি কন্টেন্ট প্রোভাইডার কম্পোনেন্ট ঘোষণা করে। কন্টেন্ট প্রোভাইডার হলো ContentProvider এর একটি সাবক্লাস যা অ্যাপ্লিকেশন দ্বারা পরিচালিত ডেটাতে কাঠামোগত অ্যাক্সেস সরবরাহ করে। আপনার অ্যাপ্লিকেশনের সমস্ত কন্টেন্ট প্রোভাইডারকে ম্যানিফেস্ট ফাইলের একটি <provider> এলিমেন্টে সংজ্ঞায়িত করতে হবে। অন্যথায়, সিস্টেম সেগুলির বিষয়ে অবগত থাকে না এবং সেগুলিকে রান করে না।

শুধুমাত্র সেইসব কন্টেন্ট প্রোভাইডার ঘোষণা করুন যেগুলো আপনার অ্যাপ্লিকেশনের অংশ। অন্য কোনো অ্যাপ্লিকেশনে থাকা এমন কন্টেন্ট প্রোভাইডার ঘোষণা করবেন না যা আপনি আপনার অ্যাপ্লিকেশনে ব্যবহার করেন।

অ্যান্ড্রয়েড সিস্টেম একটি অথরিটি স্ট্রিং অনুসারে কন্টেন্ট প্রোভাইডারদের রেফারেন্স সংরক্ষণ করে, যা প্রোভাইডারের কন্টেন্ট URI- এর একটি অংশ। উদাহরণস্বরূপ, ধরুন আপনি এমন একটি কন্টেন্ট প্রোভাইডার অ্যাক্সেস করতে চান যা স্বাস্থ্যসেবা পেশাদারদের সম্পর্কে তথ্য সংরক্ষণ করে। এটি করার জন্য, আপনাকে ContentResolver.query() মেথডটি কল করতে হবে, যা অন্যান্য আর্গুমেন্টের সাথে প্রোভাইডারকে শনাক্তকারী একটি URI গ্রহণ করে।

content://com.example.project.healthcareprovider/nurses/rn

` content: ` স্কিমটি URI-টিকে একটি কন্টেন্ট URI হিসেবে চিহ্নিত করে, যা একটি অ্যান্ড্রয়েড কন্টেন্ট প্রোভাইডারকে নির্দেশ করে। com.example.project.healthcareprovider অথরিটিটি প্রোভাইডারটিকেই চিহ্নিত করে। অ্যান্ড্রয়েড সিস্টেম তার পরিচিত প্রোভাইডার এবং তাদের অথরিটির তালিকা থেকে এই অথরিটিটিকে খুঁজে বের করে। nurses/rn সাবস্ট্রিংটি একটি পাথ , যা কন্টেন্ট প্রোভাইডারটি প্রোভাইডার ডেটার উপসেটগুলো শনাক্ত করতে ব্যবহার করে।

যখন আপনি <provider> এলিমেন্টের মধ্যে আপনার প্রোভাইডারকে সংজ্ঞায়িত করেন, তখন android:name আর্গুমেন্টে স্কিম বা পাথ অন্তর্ভুক্ত করেন না, শুধুমাত্র অথরিটি অন্তর্ভুক্ত করেন।

কন্টেন্ট প্রোভাইডার ব্যবহার ও উন্নয়ন সম্পর্কে তথ্যের জন্য, কন্টেন্ট প্রোভাইডার্স দেখুন।

বৈশিষ্ট্য:
android:authorities
এক বা একাধিক URI অথরিটির একটি তালিকা যা কন্টেন্ট প্রোভাইডার দ্বারা প্রদত্ত ডেটা শনাক্ত করে। একাধিক অথরিটির নাম সেমিকোলন দিয়ে আলাদা করে তালিকাভুক্ত করুন। দ্বন্দ্ব এড়াতে, অথরিটির নামের জন্য জাভা-স্টাইলের নামকরণের রীতি ব্যবহার করুন, যেমন com.example.provider.cartoonprovider । সাধারণত, এটি ContentProvider সাবক্লাসের নাম যা প্রোভাইডারটি ইমপ্লিমেন্ট করে।

ডিফল্ট কোনো ব্যবস্থা নেই। অন্তত একটি কর্তৃপক্ষকে অবশ্যই নির্দিষ্ট করতে হবে।

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

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

android:directBootAware

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

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

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

android:exported
কন্টেন্ট প্রোভাইডারটি অন্যান্য অ্যাপ্লিকেশনের ব্যবহারের জন্য উপলব্ধ কিনা।
  • "true" : প্রোভাইডারটি অন্যান্য অ্যাপ্লিকেশনের জন্য উপলব্ধ। যেকোনো অ্যাপ্লিকেশন প্রোভাইডারটির জন্য নির্দিষ্ট করা অনুমতি সাপেক্ষে, এর কন্টেন্ট ইউআরআই ব্যবহার করে এটিকে অ্যাক্সেস করতে পারে।
  • "false" : প্রোভাইডারটি অন্যান্য অ্যাপ্লিকেশনের জন্য উপলব্ধ নয়। প্রোভাইডারটিতে অ্যাক্সেস শুধুমাত্র আপনার অ্যাপ্লিকেশনগুলোর মধ্যে সীমাবদ্ধ রাখতে android:exported="false" সেট করুন। শুধুমাত্র সেইসব অ্যাপ্লিকেশনই এটি অ্যাক্সেস করতে পারবে যাদের ইউজার আইডি (UID) প্রোভাইডারটির ইউজার আইডির সমান, অথবা সেইসব অ্যাপ্লিকেশন যাদেরকে android:grantUriPermissions এলিমেন্টের মাধ্যমে সাময়িকভাবে প্রোভাইডারটিতে অ্যাক্সেস দেওয়া হয়েছে।

যেহেতু এই অ্যাট্রিবিউটটি এপিআই লেভেল ১৭-এ চালু করা হয়েছিল, তাই এপিআই লেভেল ১৬ এবং তার নিচের সংস্করণে চালিত সমস্ত ডিভাইস এমনভাবে কাজ করে যেন এই অ্যাট্রিবিউটটি "true" সেট করা আছে। আপনি যদি android:targetSdkVersion কে ১৭ বা তার বেশি সেট করেন, তাহলে এপিআই লেভেল ১৭ এবং তার উপরের সংস্করণে চালিত ডিভাইসগুলির জন্য ডিফল্ট মান "false" হবে।

আপনি android:exported="false" সেট করার পরেও permission অ্যাট্রিবিউটের মাধ্যমে পারমিশন সেট করে আপনার প্রোভাইডারের অ্যাক্সেস সীমিত করতে পারেন।

android:grantUriPermissions
যাদের সাধারণত কন্টেন্ট প্রোভাইডারের ডেটা অ্যাক্সেস করার অনুমতি নেই, তাদেরকে readPermission , writePermission , permission , এবং exported অ্যাট্রিবিউট দ্বারা আরোপিত সীমাবদ্ধতা সাময়িকভাবে অতিক্রম করে সেই অনুমতি দেওয়া যায় কিনা।

অনুমতি দেওয়া গেলে "true" এবং না গেলে "false" হবে। "true" হলে, কন্টেন্ট প্রোভাইডারের যেকোনো ডেটাতে অনুমতি দেওয়া যাবে। "false" হলে, শুধুমাত্র <grant-uri-permission> সাব-এলিমেন্টে তালিকাভুক্ত ডেটার উপসেটগুলিতে (যদি থাকে) অনুমতি দেওয়া যাবে। ডিফল্ট মান হলো "false"

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

এইসব ক্ষেত্রে, কম্পোনেন্টটি সক্রিয়কারী Intent অবজেক্টে FLAG_GRANT_READ_URI_PERMISSION এবং FLAG_GRANT_WRITE_URI_PERMISSION ফ্ল্যাগের মাধ্যমে অনুমতি দেওয়া হয়। উদাহরণস্বরূপ, মেইল ​​অ্যাপ্লিকেশনটি Context.startActivity() -তে পাঠানো IntentFLAG_GRANT_READ_URI_PERMISSION ফ্ল্যাগটি রাখতে পারে। এই অনুমতিটি Intent মধ্যে থাকা URI-টির জন্যই নির্দিষ্ট।

আপনি যদি এই অ্যাট্রিবিউটটিকে "true" সেট করে অথবা <grant-uri-permission> সাব-এলিমেন্ট সংজ্ঞায়িত করে এই বৈশিষ্ট্যটি সক্রিয় করেন, তাহলে প্রোভাইডার থেকে কোনো আচ্ছাদিত URI মুছে ফেলা হলে Context.revokeUriPermission() কল করুন।

<grant-uri-permission> এলিমেন্টটিও দেখুন।

android:icon
কন্টেন্ট প্রোভাইডারকে প্রতিনিধিত্বকারী একটি আইকন। এই অ্যাট্রিবিউটটি ইমেজ ডেফিনিশন ধারণকারী একটি ড্রয়েবল রিসোর্সের রেফারেন্স হিসেবে সেট করা হয়। যদি এটি সেট করা না থাকে, তবে এর পরিবর্তে সম্পূর্ণ অ্যাপ্লিকেশনের জন্য নির্দিষ্ট আইকনটি ব্যবহৃত হয়। আরও তথ্যের জন্য, <application> এলিমেন্টের icon অ্যাট্রিবিউটটি দেখুন।
android:initOrder
একই প্রসেস দ্বারা হোস্ট করা অন্যান্য কন্টেন্ট প্রোভাইডারদের সাপেক্ষে, যে ক্রমে কন্টেন্ট প্রোভাইডারটি ইনস্ট্যানশিয়েট করা হয়। যখন কন্টেন্ট প্রোভাইডারদের মধ্যে নির্ভরশীলতা থাকে, তখন তাদের প্রত্যেকের জন্য এই অ্যাট্রিবিউটটি সেট করলে তা নিশ্চিত করে যে, সেই নির্ভরশীলতাগুলোর জন্য প্রয়োজনীয় ক্রমেই সেগুলো তৈরি হবে। এর মান একটি পূর্ণসংখ্যা, যেখানে উচ্চতর সংখ্যাগুলো প্রথমে ইনিশিয়ালাইজ করা হয়।
android:label
প্রদত্ত বিষয়বস্তুর জন্য একটি ব্যবহারকারী-পাঠযোগ্য লেবেল। যদি এই অ্যাট্রিবিউটটি সেট করা না থাকে, তবে এর পরিবর্তে সম্পূর্ণ অ্যাপ্লিকেশনটির জন্য সেট করা লেবেলটি ব্যবহৃত হয়। আরও তথ্যের জন্য, <application> এলিমেন্টের label অ্যাট্রিবিউটটি দেখুন।

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

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

এই ফ্ল্যাগটিকে "true" তে সেট করলে আন্তঃপ্রক্রিয়া যোগাযোগের অতিরিক্ত চাপ কমে যাওয়ায় পারফরম্যান্স উন্নত হতে পারে, কিন্তু এটি প্রতিটি প্রক্রিয়ার মেমরি ব্যবহারও বাড়িয়ে দেয়।

android:name
যে ক্লাসটি কন্টেন্ট প্রোভাইডার ইমপ্লিমেন্ট করে, তার নাম হলো ContentProvider এর একটি সাবক্লাস। এটি সাধারণত একটি পূর্ণাঙ্গ ক্লাস নেম হয়, যেমন "com.example.project.TransportationProvider" । তবে, সংক্ষিপ্ত রূপ হিসেবে, যদি নামের প্রথম অক্ষরটি একটি পিরিয়ড (.) হয়, তাহলে সেটি <manifest> এলিমেন্টে উল্লেখিত প্যাকেজ নেমের সাথে যুক্ত করা হয়।

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

android:permission
কন্টেন্ট প্রোভাইডারের ডেটা পড়া বা লেখার জন্য ক্লায়েন্টদের যে পারমিশনটি অবশ্যই থাকতে হবে, এটি তার নাম। এই অ্যাট্রিবিউটটি পড়া এবং লেখা উভয়ের জন্য একটিমাত্র পারমিশন নির্ধারণ করার একটি সুবিধাজনক উপায়। তবে, readPermission , writePermission এবং grantUriPermissions অ্যাট্রিবিউটগুলো এটির চেয়ে অগ্রাধিকার পায়।

যদি readPermission অ্যাট্রিবিউটটিও সেট করা থাকে, তবে এটি কন্টেন্ট প্রোভাইডারকে কোয়েরি করার অ্যাক্সেস নিয়ন্ত্রণ করে। যদি writePermission অ্যাট্রিবিউটটি সেট করা থাকে, তবে এটি প্রোভাইডারের ডেটা পরিবর্তন করার অ্যাক্সেস নিয়ন্ত্রণ করে।

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

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

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

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

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

android:readPermission

কন্টেন্ট প্রোভাইডারকে কোয়েরি করার জন্য ক্লায়েন্টদের এই অনুমতিটি অবশ্যই থাকতে হবে।

যদি প্রোভাইডার android:grantUriPermissions "true" তে সেট করে, অথবা যদি কোনো নির্দিষ্ট ক্লায়েন্ট <grant-uri-permission> সাব-এলিমেন্টের শর্তগুলো পূরণ করে, তাহলে ক্লায়েন্টটি কন্টেন্ট প্রোভাইডারের ডেটাতে অস্থায়ী রিড অ্যাক্সেস পেতে পারে।

এছাড়াও permission এবং writePermission অ্যাট্রিবিউটগুলো দেখুন।

android:syncable
কন্টেন্ট প্রোভাইডারের নিয়ন্ত্রণে থাকা ডেটা সার্ভারের ডেটার সাথে সিঙ্ক্রোনাইজ করা যাবে কি না। যদি করা যায়, তবে এটি "true" হবে, এবং যদি না যায়, তবে "false"
android:writePermission

কন্টেন্ট প্রোভাইডার দ্বারা নিয়ন্ত্রিত ডেটাতে পরিবর্তন করার জন্য ক্লায়েন্টদের এই অনুমতির প্রয়োজন হয়।

যদি প্রোভাইডার android:grantUriPermissions "true" তে সেট করে, অথবা যদি কোনো নির্দিষ্ট ক্লায়েন্ট <grant-uri-permission> সাব-এলিমেন্টের শর্তগুলো পূরণ করে, তাহলে ক্লায়েন্টটি কন্টেন্ট প্রোভাইডারের ডেটা পরিবর্তন করার জন্য অস্থায়ী রাইট অ্যাক্সেস পেতে পারে।

এছাড়াও permission এবং readPermission অ্যাট্রিবিউটগুলো দেখুন।

এতে প্রবর্তন করা হয়েছিল:
এপিআই স্তর ১
আরও দেখুন:
বিষয়বস্তু প্রদানকারী