স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক ব্যবহার করে ফাইল খোলা

Android 4.4 (API লেভেল ১৯) স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) নিয়ে এসেছে। SAF ব্যবহারকারীদের তাদের সমস্ত পছন্দের ডকুমেন্ট স্টোরেজ প্রদানকারী জুড়ে ডকুমেন্ট, ছবি এবং অন্যান্য ফাইল ব্রাউজ করতে এবং খুলতে দেয়। একটি স্ট্যান্ডার্ড, সহজে ব্যবহারযোগ্য UI ব্যবহারকারীদের ফাইল ব্রাউজ করতে এবং অ্যাপ ও প্রদানকারী জুড়ে একটি সামঞ্জস্যপূর্ণ উপায়ে সাম্প্রতিক ফাইল অ্যাক্সেস করতে দেয়।

ক্লাউড বা লোকাল স্টোরেজ পরিষেবাগুলি একটি DocumentsProvider প্রয়োগ করে এই ইকোসিস্টেমে অংশগ্রহণ করতে পারে যা তাদের পরিষেবাগুলিকে এনক্যাপসুলেট করে। যেসব ক্লায়েন্ট অ্যাপের কোনও পরিষেবা প্রদানকারীর ডকুমেন্ট অ্যাক্সেস করার প্রয়োজন হয়, সেগুলি কয়েক লাইন কোড ব্যবহার করে SAF-এর সাথে ইন্টিগ্রেট করা যেতে পারে।

SAF-এ নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত থাকে:

  • ডকুমেন্ট প্রোভাইডার: এমন একটি কন্টেন্ট প্রোভাইডার যা Google Drive-এর মতো স্টোরেজ পরিষেবাকে, এটি ম্যানেজ করে এমন ফাইল প্রকাশ করতে দেয়। ডকুমেন্ট প্রদানকারীকে DocumentsProvider ক্লাসের সাবক্লাস হিসেবে প্রয়োগ করা হয়। ডকুমেন্ট-প্রোভাইডার স্কিমা প্রথাগত ফাইল হায়ারার্কির উপর ভিত্তি করে তৈরি, যদিও আপনার ডকুমেন্ট প্রোভাইডার কীভাবে ফিজিক্যালি ডেটা স্টোর করে তা আপনার উপর নির্ভর করে। Android প্ল্যাটফর্মে বেশ কিছু বিল্ট-ইন ডকুমেন্ট প্রোভাইডার অন্তর্ভুক্ত থাকে, যেমন ডাউনলোড, ছবি এবং ভিডিও।
  • ক্লায়েন্ট অ্যাপ: একটি কাস্টম অ্যাপ যা ACTION_CREATE_DOCUMENT, ACTION_OPEN_DOCUMENT, এবং ACTION_OPEN_DOCUMENT_TREE ইনটেন্ট অ্যাকশনকে আহ্বান করে এবং ডকুমেন্ট প্রদানকারীর পাঠানো ফাইল গ্রহণ করে।
  • পিকার: একটি সিস্টেম UI যা ব্যবহারকারীদের ক্লায়েন্ট অ্যাপের সার্চের মানদণ্ড পূরণ করে এমন সমস্ত ডকুমেন্ট প্রদানকারীর থেকে ডকুমেন্ট অ্যাক্সেস করতে দেয়।

SAF নিম্নলিখিত ফিচার অফার করে:

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

এক নজরে

SAF, কন্টেন্ট প্রোভাইডারের উপর ভিত্তি করে কাজ করে যা DocumentsProvider ক্লাসের সাবক্লাস। ডকুমেন্ট প্রোভাইডারের মধ্যে, ডেটা প্রথাগত ফাইল হায়ারার্কি হিসেবে স্ট্রাকচার করা হয়:

ছবি ১. ডকুমেন্ট প্রদানকারীর ডেটা মডেল। রুট একটি ডকুমেন্টকে পয়েন্ট করে, যা পরে ট্রি-এর ফ্যান-আউট শুরু করে।

এগুলি মনে রাখবেন:

  • প্রতিটি ডকুমেন্ট প্রদানকারী এক বা একাধিক রুট রিপোর্ট করে, যা ডকুমেন্টের ট্রি এক্সপ্লোর করার শুরুর পয়েন্ট। প্রতিটি রুটের একটি অনন্য COLUMN_ROOT_ID আছে, এবং এটি একটি ডকুমেন্ট (একটি ডিরেক্টরি) নির্দেশ করে যা সেই রুটের অধীনে কন্টেন্টকে উপস্থাপন করে। একাধিক অ্যাকাউন্ট, ট্রানজিয়েন্ট USB স্টোরেজ ডিভাইস বা ব্যবহারকারীর লগ-ইন এবং লগ-আউটের মতো ব্যবহারের ক্ষেত্রে সহায়তা করার জন্য রুটগুলি ডিজাইন অনুসারে ডাইনামিক হয়।
  • প্রতিটি রুটের অধীনে একটি করে ডকুমেন্ট থাকে। সেই ডকুমেন্ট ১ থেকে N সংখ্যক ডকুমেন্টকে নির্দেশ করে, যার প্রতিটি আবার ১ থেকে 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 ব্যবহার করে এটি অ্যাক্সেস করতে পারছেন। যেমন, আপনার ডেটার জন্য ট্যাগ-ভিত্তিক ক্লাউড স্টোরেজ ব্যবহার করতে পারেন।

ছবি ২-এ দেখানো হয়েছে যে কীভাবে একটি ফটো অ্যাপ স্টোর করা ডেটা অ্যাক্সেস করতে SAF ব্যবহার করতে পারে:

ছবি ২. Storage Access Framework ফ্লো।

এগুলি মনে রাখবেন:

  • SAF-এ, পরিষেবা প্রদানকারী এবং ক্লায়েন্ট সরাসরি ইন্টার‍্যাক্ট করেন না। কোনও ক্লায়েন্ট ফাইলের সাথে ইন্টার‍্যাক্ট করার অনুমতি চায়, যার অর্থ হল ফাইল পড়া, এডিট করা, তৈরি করা বা মুছে ফেলা।
  • কোনও অ্যাপ্লিকেশন, যেমন এই উদাহরণে একটি ফটো অ্যাপ, ইনটেন্ট ACTION_OPEN_DOCUMENT বা ACTION_CREATE_DOCUMENT ফায়ার করলে ইন্টার‍্যাকশন শুরু হয়। ইনটেন্টে ফিল্টার অন্তর্ভুক্ত থাকতে পারে যাতে মাপকাঠি আরও রিফাইন করা যায়, যেমন "আমাকে এমন সব খোলার যোগ্য ফাইল দাও যেগুলির MIME-এর ধরন 'ছবি'।"
  • ইনটেন্ট ফায়ার হয়ে গেলে, সিস্টেম পিকার প্রতিটি রেজিস্টার করা প্রোভাইডারের কাছে যায় এবং ব্যবহারকারীকে ম্যাচিং কন্টেন্ট রুট দেখায়।
  • পিকার ব্যবহারকারীদের ডকুমেন্ট অ্যাক্সেস করার জন্য একটি স্ট্যান্ডার্ড ইন্টারফেস দেয়, এমনকি যখন অন্তর্নিহিত ডকুমেন্ট প্রদানকারীরা খুব আলাদা হয়। যেমন, ছবি ২-এ একটি Google Drive প্রোভাইডার, একটি USB প্রোভাইডার এবং একটি ক্লাউড প্রোভাইডার দেখানো হয়েছে।

ছবি ৩-এ, ব্যবহারকারী ছবি খোঁজার জন্য খোলা একটি পিকার থেকে ডাউনলোড ফোল্ডার বেছে নিচ্ছেন। এছাড়াও, ক্লায়েন্ট অ্যাপে উপলভ্য সব রুট পিকার দেখায়।

সিস্টেম পিকারে ফোল্ডার বেছে নেওয়া।
ছবি ৩. পিকার দেখাচ্ছে যে সার্চ লোকেশন হিসেবে ডাউনলোড ফোল্ডার বেছে নেওয়া হয়েছে।

ব্যবহারকারী ডাউনলোড ফোল্ডার বেছে নেওয়ার পরে, ছবিগুলি দেখানো হয়। ছবি ৪-এ এই প্রসেসের ফলাফল দেখানো হয়েছে। প্রোভাইডার ও ক্লায়েন্ট অ্যাপে যেভাবে কাজ করে, ব্যবহারকারী এখন সেইভাবে ছবির সাথে ইন্টার‍্যাক্ট করতে পারবেন।

ছবি ৪. সিস্টেম পিকারে যেমন দেখা যায়, ডাউনলোড ফোল্ডারে স্টোর করা ছবি।

ক্লায়েন্ট অ্যাপ লিখুন

Android 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 ব্যবহার করে ফাইল ও ডিরেক্টরি ব্রাউজ করার ব্যাপারে কীভাবে সহায়তা করা যায় সেই সম্পর্কে আরও জানতে, ডকুমেন্ট ও অন্যান্য ফাইল অ্যাক্সেস করা সংক্রান্ত নির্দেশিকা দেখুন।

অতিরিক্ত রিসোর্স

ডকুমেন্ট প্রদানকারী সম্পর্কে আরও তথ্য পেতে, নিম্নলিখিত রিসোর্সের সুবিধা নিন:

নমুনা

ভিডিও