Android 4.4 (API স্তর 19) স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) প্রবর্তন করে। SAF ব্যবহারকারীদের তাদের সমস্ত পছন্দের নথি সংরক্ষণ সরবরাহকারী জুড়ে নথি, ছবি এবং অন্যান্য ফাইল ব্রাউজ এবং খুলতে দেয়। একটি স্ট্যান্ডার্ড, সহজে ব্যবহারযোগ্য UI ব্যবহারকারীদের ফাইল ব্রাউজ করতে এবং অ্যাপ এবং প্রদানকারী জুড়ে সামঞ্জস্যপূর্ণ উপায়ে সাম্প্রতিক ফাইলগুলি অ্যাক্সেস করতে দেয়।
ক্লাউড বা স্থানীয় স্টোরেজ পরিষেবাগুলি তাদের পরিষেবাগুলিকে অন্তর্ভুক্ত করে এমন একটি DocumentsProvider
প্রয়োগ করে এই ইকোসিস্টেমে অংশগ্রহণ করতে পারে৷ ক্লায়েন্ট অ্যাপ্লিকেশনগুলির যেগুলির একটি প্রদানকারীর নথিতে অ্যাক্সেসের প্রয়োজন সেগুলি কোডের কয়েকটি লাইন সহ SAF এর সাথে একীভূত হতে পারে৷
SAF নিম্নলিখিতগুলি অন্তর্ভুক্ত করে:
- ডকুমেন্ট প্রদানকারী: একটি সামগ্রী প্রদানকারী যা একটি স্টোরেজ পরিষেবা, যেমন Google ড্রাইভ, এটি পরিচালনা করে এমন ফাইলগুলি প্রকাশ করতে দেয়৷ একটি নথি প্রদানকারীকে
DocumentsProvider
ক্লাসের একটি সাবক্লাস হিসেবে প্রয়োগ করা হয়। ডকুমেন্ট-প্রোভাইডার স্কিমা একটি প্রথাগত ফাইল হায়াররাকির উপর ভিত্তি করে তৈরি করা হয়, যদিও আপনার ডকুমেন্ট প্রদানকারী কীভাবে ডেটা সঞ্চয় করে তা আপনার উপর নির্ভর করে। অ্যান্ড্রয়েড প্ল্যাটফর্মে অনেকগুলি অন্তর্নির্মিত নথি প্রদানকারী রয়েছে, যেমন ডাউনলোড, ছবি এবং ভিডিও৷ - ক্লায়েন্ট অ্যাপ: একটি কাস্টম অ্যাপ যা
ACTION_CREATE_DOCUMENT
,ACTION_OPEN_DOCUMENT
, এবংACTION_OPEN_DOCUMENT_TREE
অভিপ্রায় ক্রিয়াগুলিকে আহ্বান করে এবং নথি প্রদানকারীদের দ্বারা ফেরত দেওয়া ফাইলগুলি গ্রহণ করে৷ - পিকার: একটি সিস্টেম UI যা ব্যবহারকারীদের ক্লায়েন্ট অ্যাপের অনুসন্ধানের মানদণ্ড পূরণ করে এমন সমস্ত নথি প্রদানকারীর নথিগুলি অ্যাক্সেস করতে দেয়৷
SAF নিম্নলিখিত বৈশিষ্ট্যগুলি অফার করে:
- ব্যবহারকারীদের সমস্ত নথি প্রদানকারী থেকে সামগ্রী ব্রাউজ করতে দেয়, শুধুমাত্র একটি অ্যাপ নয়।
- আপনার অ্যাপের জন্য একটি নথি প্রদানকারীর মালিকানাধীন নথিগুলিতে দীর্ঘমেয়াদী, অবিরাম অ্যাক্সেস থাকা সম্ভব করে তোলে৷ এই অ্যাক্সেসের মাধ্যমে, ব্যবহারকারীরা প্রদানকারীতে ফাইলগুলি যোগ করতে, সম্পাদনা করতে, সংরক্ষণ করতে এবং মুছতে পারেন।
- ইউএসবি স্টোরেজ প্রদানকারীর মতো একাধিক ব্যবহারকারীর অ্যাকাউন্ট এবং ক্ষণস্থায়ী রুটকে সমর্থন করে, যা শুধুমাত্র ড্রাইভ প্লাগ ইন করা থাকলেই প্রদর্শিত হয়।
ওভারভিউ
SAF একটি বিষয়বস্তু প্রদানকারীর চারপাশে কেন্দ্র করে যেটি DocumentsProvider
ক্লাসের একটি সাবক্লাস। একটি নথি প্রদানকারীর মধ্যে, ডেটা একটি প্রথাগত ফাইল অনুক্রম হিসাবে গঠন করা হয়:
নিম্নলিখিত নোট করুন:
- প্রতিটি নথি প্রদানকারী এক বা একাধিক শিকড় রিপোর্ট করে, যা নথির একটি গাছ অন্বেষণের সূচনা করে। প্রতিটি রুটের একটি অনন্য
COLUMN_ROOT_ID
আছে, এবং এটি একটি নথির দিকে নির্দেশ করে (একটি ডিরেক্টরি) যা সেই রুটের অধীনে বিষয়বস্তুকে প্রতিনিধিত্ব করে। একাধিক অ্যাকাউন্ট, ক্ষণস্থায়ী ইউএসবি স্টোরেজ ডিভাইস, বা ব্যবহারকারী লগইন এবং লগআউটের মতো ব্যবহারের ক্ষেত্রে সমর্থন করার জন্য রুটগুলি ডিজাইনের দ্বারা গতিশীল। - প্রতিটি মূলের অধীনে একটি একক নথি রয়েছে। সেই ডকুমেন্টটি 1 থেকে N নথিতে নির্দেশ করে, যার প্রত্যেকটি ঘুরে ঘুরে 1 থেকে N নথিতে নির্দেশ করতে পারে।
- প্রতিটি সঞ্চয়স্থান ব্যাকএন্ড একটি অনন্য
COLUMN_DOCUMENT_ID
এর সাথে উল্লেখ করে পৃথক ফাইল এবং ডিরেক্টরিগুলিকে সারফেস করে৷ ডকুমেন্ট আইডি অনন্য এবং একবার ইস্যু করার পরে পরিবর্তন হয় না, কারণ সেগুলি ডিভাইস রিবুট জুড়ে স্থায়ী URI অনুদানের জন্য ব্যবহার করা হয়। - নথিগুলি হয় একটি খোলাযোগ্য ফাইল হতে পারে, একটি নির্দিষ্ট MIME প্রকারের সাথে, অথবা
MIME_TYPE_DIR
MIME প্রকারের সাথে অতিরিক্ত নথি সম্বলিত একটি ডিরেক্টরি। -
COLUMN_FLAGS
দ্বারা বর্ণিত প্রতিটি নথির বিভিন্ন ক্ষমতা থাকতে পারে। উদাহরণস্বরূপ,FLAG_SUPPORTS_WRITE
,FLAG_SUPPORTS_DELETE
, এবংFLAG_SUPPORTS_THUMBNAIL
। একইCOLUMN_DOCUMENT_ID
একাধিক ডিরেক্টরিতে অন্তর্ভুক্ত করা যেতে পারে৷
নিয়ন্ত্রণ প্রবাহ
নথি প্রদানকারী ডেটা মডেলটি একটি ঐতিহ্যবাহী ফাইলের অনুক্রমের উপর ভিত্তি করে। যাইহোক, যতক্ষণ না আপনি DocumentsProvider
API ব্যবহার করে এটি অ্যাক্সেস করতে পারেন ততক্ষণ আপনি আপনার পছন্দ মতো আপনার ডেটা সঞ্চয় করতে পারেন। উদাহরণস্বরূপ, আপনি আপনার ডেটার জন্য ট্যাগ-ভিত্তিক ক্লাউড স্টোরেজ ব্যবহার করতে পারেন।
চিত্র 2 দেখায় কিভাবে একটি ফটো অ্যাপ সঞ্চিত ডেটা অ্যাক্সেস করতে SAF ব্যবহার করতে পারে:
নিম্নলিখিত নোট করুন:
- SAF এ, প্রদানকারী এবং ক্লায়েন্টরা সরাসরি যোগাযোগ করে না। একটি ক্লায়েন্ট ফাইলগুলির সাথে ইন্টারঅ্যাক্ট করার অনুমতির অনুরোধ করে, যার অর্থ ফাইলগুলি পড়া, সম্পাদনা করা, তৈরি করা বা মুছে ফেলা।
- ইন্টারঅ্যাকশন শুরু হয় যখন একটি অ্যাপ্লিকেশন, এই উদাহরণে একটি ফটো অ্যাপ, উদ্দেশ্য
ACTION_OPEN_DOCUMENT
বাACTION_CREATE_DOCUMENT
ফায়ার করে। অভিপ্রায়টি আরও পরিমার্জিত করার জন্য ফিল্টারগুলি অন্তর্ভুক্ত করতে পারে, যেমন "আমাকে 'ছবি' MIME প্রকারের সমস্ত খোলাযোগ্য ফাইল দিন৷" - ইন্টেন্ট ফায়ার হয়ে গেলে, সিস্টেম পিকার প্রতিটি নিবন্ধিত প্রদানকারীর কাছে যায় এবং ব্যবহারকারীকে সামঞ্জস্যপূর্ণ বিষয়বস্তুর মূল দেখায়।
- বাছাইকারী ব্যবহারকারীদের নথিগুলি অ্যাক্সেস করার জন্য একটি আদর্শ ইন্টারফেস দেয়, এমনকি যখন অন্তর্নিহিত নথি প্রদানকারীরা খুব আলাদা হয়। উদাহরণস্বরূপ, চিত্র 2 একটি Google ড্রাইভ প্রদানকারী, একটি USB প্রদানকারী এবং একটি ক্লাউড প্রদানকারীকে দেখায়।
চিত্র 3-এ, ব্যবহারকারী ছবি অনুসন্ধানে খোলা একটি পিকার থেকে ডাউনলোড ফোল্ডার নির্বাচন করছেন। পিকারটি ক্লায়েন্ট অ্যাপে উপলব্ধ সমস্ত রুটও দেখায়।
ব্যবহারকারী ডাউনলোড ফোল্ডার নির্বাচন করার পরে, ছবিগুলি প্রদর্শিত হয়। চিত্র 4 এই প্রক্রিয়ার ফলাফল দেখায়। ব্যবহারকারী এখন ইমেজগুলির সাথে এমনভাবে যোগাযোগ করতে পারে যেভাবে প্রদানকারী এবং ক্লায়েন্ট অ্যাপ সমর্থন করে।
একটি ক্লায়েন্ট অ্যাপ লিখুন
অ্যান্ড্রয়েড 4.3 এবং তার নিচের সংস্করণে, আপনি যদি চান যে আপনার অ্যাপটি অন্য অ্যাপ থেকে একটি ফাইল পুনরুদ্ধার করুক, তাহলে এটিকে অবশ্যই ACTION_PICK
বা ACTION_GET_CONTENT
এর মতো একটি উদ্দেশ্য আহ্বান করতে হবে। ব্যবহারকারী তারপর একটি ফাইল বাছাই করার জন্য একটি একক অ্যাপ্লিকেশন নির্বাচন করে। নির্বাচিত অ্যাপটিকে অবশ্যই ব্যবহারকারীর জন্য একটি ইউজার ইন্টারফেস প্রদান করতে হবে যাতে ব্রাউজ করা যায় এবং উপলব্ধ ফাইলগুলি থেকে বাছাই করা যায়।
Android 4.4 (API স্তর 19) এবং উচ্চতর, আপনার কাছে ACTION_OPEN_DOCUMENT
অভিপ্রায় ব্যবহার করার অতিরিক্ত বিকল্প রয়েছে, যা একটি সিস্টেম-নিয়ন্ত্রিত পিকার UI প্রদর্শন করে যা ব্যবহারকারীকে অন্যান্য অ্যাপগুলি উপলব্ধ করা সমস্ত ফাইল ব্রাউজ করতে দেয়৷ এই একক UI থেকে, ব্যবহারকারী যেকোনো সমর্থিত অ্যাপ থেকে একটি ফাইল বাছাই করতে পারেন।
Android 5.0 (API স্তর 21) এবং উচ্চতর, আপনি ACTION_OPEN_DOCUMENT_TREE
অভিপ্রায়ও ব্যবহার করতে পারেন, যা ব্যবহারকারীকে একটি ক্লায়েন্ট অ্যাপ অ্যাক্সেস করার জন্য একটি ডিরেক্টরি বেছে নিতে দেয়৷
দ্রষ্টব্য: ACTION_OPEN_DOCUMENT
ACTION_GET_CONTENT
এর প্রতিস্থাপন নয়। আপনি যেটি ব্যবহার করেন তা আপনার অ্যাপের প্রয়োজনের উপর নির্ভর করে:
- আপনি যদি আপনার অ্যাপটি ডেটা পড়তে বা আমদানি করতে চান তবে
ACTION_GET_CONTENT
ব্যবহার করুন৷ এই পদ্ধতির সাথে, অ্যাপটি ডেটার একটি অনুলিপি আমদানি করে, যেমন একটি চিত্র ফাইল। -
ACTION_OPEN_DOCUMENT
ব্যবহার করুন যদি আপনি চান যে আপনার অ্যাপ্লিকেশানটি একটি নথি প্রদানকারীর মালিকানাধীন নথিগুলিতে দীর্ঘমেয়াদী, অবিরাম অ্যাক্সেস থাকুক৷ একটি উদাহরণ হল একটি ফটো-সম্পাদনা অ্যাপ্লিকেশন যা ব্যবহারকারীদের একটি নথি প্রদানকারীতে সঞ্চিত ছবিগুলি সম্পাদনা করতে দেয়৷
সিস্টেম পিকার UI ব্যবহার করে ফাইল এবং ডিরেক্টরিগুলির জন্য ব্রাউজিং সমর্থন করার বিষয়ে আরও তথ্যের জন্য, নথি এবং অন্যান্য ফাইল অ্যাক্সেস করার নির্দেশিকা দেখুন।
অতিরিক্ত সম্পদ
নথি প্রদানকারীদের সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলির সুবিধা নিন:
নমুনা
ভিডিও
- DevBytes: Android 4.4 স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক: প্রদানকারী
- স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্কের ভার্চুয়াল ফাইল