Storage Access Framework হল একটি Android ফ্রেমওয়ার্ক যা সিস্টেম নির্বাচন ডায়ালগের মাধ্যমে ফাইল এবং ডকুমেন্টে নিরাপদ অ্যাক্সেস প্রদান করে। স্টোরেজ পড়ার বিস্তৃত অনুমতি চাওয়ার পরিবর্তে, অ্যাপ ব্যবহারকারীর নির্বাচিত ফাইলের একটি URI লিঙ্ক পায়। Android Developers (2026) অনুযায়ী, SAF DocumentProvider-এর মাধ্যমে লোকাল স্টোরেজ, Google Drive এবং Dropbox ক্লাউড পরিষেবা সমর্থন করে। ফ্রেমওয়ার্কটি Android 4.4-এ চালু হয় এবং Android 10 থেকে ডকুমেন্ট নিয়ে কাজ করার মানদণ্ড হয়ে ওঠে।
মুখ্য বিষয়
Storage Access Framework হল Android SDK-এর একটি অংশ যা সিস্টেম ডায়ালগের মাধ্যমে ডকুমেন্ট নির্বাচন এবং তৈরি করার জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে। SAF ফাইলগুলোর ভৌত অবস্থান বিমূর্ত করে: অ্যাপ জানে না ফাইল কোথায় পড়া হচ্ছে — লোকাল ডিস্ক, Google Drive বা Dropbox থেকে।
SAF আর্কিটেকচারে তিনটি উপাদান অন্তর্ভুক্ত: ক্লায়েন্ট অ্যাপ যা অনুরোধ শুরু করে, সিস্টেম পিকার — একটি মানক ফাইল নির্বাচন ডায়ালগ, এবং DocumentProvider — একটি কনটেন্ট প্রোভাইডার যা নির্দিষ্ট স্টোরেজের ফাইলগুলিতে অ্যাক্সেস বাস্তবায়ন করে। ব্যবহারকারী ডেটা উৎস নির্বিশেষে একটি ইউনিফাইড ইন্টারফেস দেখেন।
SAF Android 4.4 (API 19) থেকে উপলব্ধ। প্রাথমিকভাবে ফ্রেমওয়ার্কটি শুধুমাত্র ডকুমেন্ট সমর্থন করত, কিন্তু Android 5.0-এ ACTION_OPEN_DOCUMENT_TREE-এর মাধ্যমে ডিরেক্টরির সমর্থন যোগ করা হয়। Android 10 থেকে, SAF অ্যাপ-নির্দিষ্ট স্টোরেজের বাইরে যেকোনো ফাইল অ্যাক্সেসের জন্য প্রস্তাবিত উপায় হয়ে ওঠে।
SAF ACTION_OPEN_DOCUMENT অ্যাকশন সহ Intent-এর মাধ্যমে একটি সিস্টেম ফাইল নির্বাচন ডায়ালগ চালু করে। ব্যবহারকারী উপলব্ধ উৎসগুলির তালিকা দেখেন: অভ্যন্তরীণ স্টোরেজ, Google Drive, Dropbox এবং অন্যান্য নিবন্ধিত প্রদানকারী। ফাইল নির্বাচনের পর, সিস্টেম অস্থায়ী অ্যাক্সেস অধিকার সহ content URI ফেরত দেয়।
Content URI-এর বিন্যাস হল content://com.android.externalstorage.documents/document/primary/Download/file.pdf। file:// URI-এর বিপরীতে, content URI প্রকৃত ফাইল পথ প্রকাশ করে না এবং DocumentProvider-এর মাধ্যমে কাজ করে। অ্যাপ প্রাপ্ত URI ব্যবহার করে ContentResolver.openInputStream-এর মাধ্যমে ফাইল পড়ে।
সিস্টেম পিকার স্বয়ংক্রিয়ভাবে MIME প্রকার দ্বারা ফাইলগুলির অনুসন্ধান, বাছাই এবং ফিল্টারিং সমর্থন করে। ডেভেলপার Intent.putExtra(Intent.EXTRA_MIME_TYPES, arrayOf("application/pdf", "image/*"))-এর মাধ্যমে প্রয়োজনীয় প্রকার নির্দিষ্ট করে, এবং পিকার শুধুমাত্র প্রাসঙ্গিক ফাইল দেখায়।
ডিফল্টভাবে, URI অ্যাপ পুনরারম্ভ বা ডিভাইস রিবুট পর্যন্ত বৈধ। দীর্ঘমেয়াদী অ্যাক্সেসের জন্য, অ্যাপ takePersistableUriPermission অনুরোধ করে — এটি ডায়ালগের মাধ্যমে পুনরায় নির্বাচন না করেই পরবর্তী লঞ্চে ফাইল পড়ার অনুমতি দেয়।
SAF ফাইল নিয়ে কাজ করার জন্য তিনটি প্রধান অ্যাকশন প্রদান করে: খোলা, তৈরি করা এবং ফোল্ডার ট্রি নির্বাচন। ACTION_OPEN_DOCUMENT বিদ্যমান ফাইল নির্বাচনের জন্য সিস্টেম পিকার খোলে। ACTION_CREATE_DOCUMENT একটি নতুন ফাইল তৈরি করে — ব্যবহারকারী ডায়ালগে নাম প্রবেশ করান, এবং অ্যাপ লেখার জন্য URI পায়।
ACTION_OPEN_DOCUMENT_TREE একটি সম্পূর্ণ ডিরেক্টরি নির্বাচন এবং এর ভিতরের সমস্ত ফাইলে অ্যাক্সেস পাওয়ার অনুমতি দেয়। এটি ফাইল ম্যানেজার, ব্যাকআপ এবং সিঙ্ক্রোনাইজেশন অ্যাপে ব্যবহৃত হয়। অ্যাপ একটি ডিরেক্টরি URI পায় এবং DocumentFile-এর মাধ্যমে পুনরাবৃত্তিমূলকভাবে বিষয়বস্তু তালিকাভুক্ত করতে পারে।
| অ্যাকশন | উদ্দেশ্য | ফ্ল্যাগ |
|---|---|---|
| ACTION_OPEN_DOCUMENT | বিদ্যমান ফাইল নির্বাচন | READ_FLAG |
| ACTION_CREATE_DOCUMENT | নতুন ফাইল তৈরি | WRITE_FLAG |
| ACTION_OPEN_DOCUMENT_TREE | ডিরেক্টরি নির্বাচন | READ + WRITE |
প্রতিটি অ্যাকশনের জন্য, MIME প্রকার EXTRA_MIME_TYPES-এর মাধ্যমে নির্দিষ্ট করা হয়। একাধিক প্রকার নির্দিষ্ট করা যেতে পারে: "application/pdf", "image/*", "text/plain"। যদি প্রকার নির্দিষ্ট না করা হয়, পিকার সব ফাইল দেখায়।
Persistent URI permissions হল একটি SAF প্রক্রিয়া যা বর্তমান সেশন শেষ হওয়ার পর ফাইলে অ্যাক্সেস বজায় রাখার অনুমতি দেয়। এই ফ্ল্যাগ ছাড়া, URI কেবল অ্যাপ পুনরারম্ভ পর্যন্ত বৈধ। অ্যাপ READ এবং WRITE ফ্ল্যাগ সহ FLAG_GRANT_PERSISTABLE_URI_PERMISSION ফ্ল্যাগ অনুরোধ করে।
অনুমতি সংরক্ষণের জন্য ContentResolver.takePersistableUriPermission পদ্ধতি ব্যবহার করা হয়। সিস্টেম URI একটি বিশেষ রেজিস্ট্রিতে সংরক্ষণ করে এবং পরবর্তী অ্যাপ লঞ্চে অ্যাক্সেস পুনরুদ্ধার করে। অ্যাপের URI-তে স্থায়ী অ্যাক্সেস আছে কিনা তা পরীক্ষা করতে, ContentResolver.persistedUriPermissions ব্যবহার করা হয়।
ব্যবহারকারী সেটিংস → অ্যাপস → অনুমতি-এর মাধ্যমে সংরক্ষিত অনুমতি প্রত্যাহার করতে পারেন। অ্যাপের এমন পরিস্থিতি সামলানো উচিত যখন ফাইলের অ্যাক্সেস অপ্রত্যাশিতভাবে হারিয়ে যায়। কাজ শুরু করার আগে ContentResolver.openInputStream-এর মাধ্যমে অ্যাক্সেস পরীক্ষা এবং SecurityException সঠিকভাবে সামলানোর পরামর্শ দেওয়া হয়।
SAF একটি মানক Intent-এর মাধ্যমে চালু করা হয়। কোড ন্যূনতম: ACTION_OPEN_DOCUMENT সহ Intent তৈরি করুন, MIME প্রকার নির্দিষ্ট করুন এবং ActivityResultContracts.StartActivityForResult-এর মাধ্যমে চালু করুন। ফাইল নির্বাচনের পর, callback data.data-তে URI পায়, যা পরে পড়ার জন্য ব্যবহৃত হয়।
val pickFile = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
result.data?.data?.let { uri ->
val inputStream = contentResolver?.openInputStream(uri)
// read from inputStream
}
}
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
setType("application/pdf")
putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
}
pickFile.launch(intent)
নতুন ফাইল লেখার জন্য, ACTION_CREATE_DOCUMENT ব্যবহার করুন। Intent MIME প্রকার এবং EXTRA_TITLE-এর মাধ্যমে ফাইলের নাম গ্রহণ করে। ফোল্ডার নির্বাচন এবং নিশ্চিত করার পর, ব্যবহারকারী একটি URI ফেরত দেন যাতে অ্যাপ ContentResolver.openOutputStream-এর মাধ্যমে ডেটা লেখে। সিস্টেম স্বয়ংক্রিয়ভাবে নির্বাচিত স্থানে ফাইল তৈরি করে।
SAF প্রথাগত READ_EXTERNAL_STORAGE থেকে নিরাপত্তার প্রতি মৌলিকভাবে ভিন্ন দৃষ্টিভঙ্গিতে আলাদা। একবারে সম্পূর্ণ স্টোরেজে অ্যাক্সেস অনুরোধ করার পরিবর্তে, SAF কেবল একটি নির্দিষ্ট ফাইলে অ্যাক্সেস অনুরোধ করে। এটি আক্রমণের পৃষ্ঠকে হ্রাস করে এবং ব্যবহারকারীর আস্থা বাড়ায়।
READ_EXTERNAL_STORAGE ডিভাইসের সমস্ত ফাইলে অ্যাক্সেস দেয়, অন্যান্য অ্যাপের ফটো এবং ডকুমেন্ট সহ। Android 10+-এ, এই পদ্ধতি সীমাবদ্ধ। SAF, বিপরীতে, শুধুমাত্র ব্যবহারকারীর নির্বাচিত ফাইলে অ্যাক্সেস প্রদান করে এবং প্রতিটি ফাইলের জন্য স্পষ্ট নিশ্চিতকরণ প্রয়োজন। ব্যাচ মিডিয়া অপারেশনের জন্য MediaStore ব্যবহার করুন, পৃথক ডকুমেন্টের জন্য SAF ব্যবহার করুন।
SAF-এর প্রধান অসুবিধা হল প্রতিটি ফাইল পৃথকভাবে নির্বাচনের প্রয়োজন। বাল্ক অপারেশনের (ব্যাকআপ, ফোল্ডার সিঙ্ক্রোনাইজেশন) জন্য, ACTION_OPEN_DOCUMENT_TREE ব্যবহার করা হয়, যা নির্বাচিত ডিরেক্টরির সমস্ত ফাইলে অ্যাক্সেস দেয়। সমাধান পরিস্থিতির উপর নির্ভর করে: SAF ব্যবহারকারী নির্বাচনের জন্য সর্বোত্তম, MediaStore প্রোগ্রাম্যাটিক মিডিয়া অ্যাক্সেসের জন্য।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Storage Access Framework হল একটি Android ফ্রেমওয়ার্ক যা সিস্টেম নির্বাচন ডায়ালগের মাধ্যমে নিরাপদ ফাইল অ্যাক্সেসের জন্য। অ্যাপ স্টোরেজ পড়ার বিস্তৃত অনুমতি না চেয়ে নির্বাচিত ফাইলের জন্য content URI পায়।
ACTION_OPEN_DOCUMENT সহ Intent তৈরি করুন, setType-এর মাধ্যমে MIME প্রকার নির্দিষ্ট করুন এবং ActivityResultContracts-এর মাধ্যমে চালু করুন। Callback-এ, data.data থেকে URI পান এবং ContentResolver.openInputStream-এর মাধ্যমে পড়ুন।
Persistent URI permissions হল অ্যাপ পুনরারম্ভের পর URI-তে অ্যাক্সেস বজায় রাখার একটি প্রক্রিয়া। এটি FLAG_GRANT_PERSISTABLE_URI_PERMISSION ফ্ল্যাগ এবং takePersistableUriPermission পদ্ধতির মাধ্যমে অনুরোধ করা হয়।
SAF যেকোনো MIME প্রকার সমর্থন করে: application/pdf, image/*, text/plain, application/zip এবং অন্যান্য। প্রকার EXTRA_MIME_TYPES অ্যারে সহ Intent.putExtra-এর মাধ্যমে নির্দিষ্ট করা হয়।
SAF ব্যবহারকারীর দ্বারা সিস্টেম ডায়ালগের মাধ্যমে পৃথক ফাইল নির্বাচনের জন্য ডিজাইন করা হয়েছে। MediaStore ব্যবহারকারীর অংশগ্রহণ ছাড়াই মিডিয়া ডেটাবেসের মাধ্যমে ডিভাইসের সমস্ত মিডিয়া ফাইলে প্রোগ্রাম্যাটিক অ্যাক্সেস প্রদান করে।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন