Storage Access Framework: এটি কী, কীভাবে কাজ করে এবং Android-এ ফাইল অ্যাক্সেস

লেখক: IT Sectr প্রকাশিত: 2026-07-10 পড়ার সময়: 6 মিনিট

Storage Access Framework হল একটি Android ফ্রেমওয়ার্ক যা সিস্টেম নির্বাচন ডায়ালগের মাধ্যমে ফাইল এবং ডকুমেন্টে নিরাপদ অ্যাক্সেস প্রদান করে। স্টোরেজ পড়ার বিস্তৃত অনুমতি চাওয়ার পরিবর্তে, অ্যাপ ব্যবহারকারীর নির্বাচিত ফাইলের একটি URI লিঙ্ক পায়। Android Developers (2026) অনুযায়ী, SAF DocumentProvider-এর মাধ্যমে লোকাল স্টোরেজ, Google Drive এবং Dropbox ক্লাউড পরিষেবা সমর্থন করে। ফ্রেমওয়ার্কটি Android 4.4-এ চালু হয় এবং Android 10 থেকে ডকুমেন্ট নিয়ে কাজ করার মানদণ্ড হয়ে ওঠে।

মুখ্য বিষয়

  • SAF হল একটি Android ফ্রেমওয়ার্ক যা বিস্তৃত অনুমতি ছাড়াই সিস্টেম ডায়ালগের মাধ্যমে ফাইল নির্বাচনের জন্য।
  • URI লিঙ্ক সরাসরি ফাইল পাথ প্রতিস্থাপন করে: অ্যাপ content URI-এর মাধ্যমে ফাইলের সাথে কাজ করে।
  • Persistent permissions অ্যাপ পুনরারম্ভের পর ফাইলে অ্যাক্সেস বজায় রাখার অনুমতি দেয়।
  • DocumentProvider ক্লাউড এবং কাস্টম স্টোরেজে অ্যাক্সেসের জন্য SAF-কে প্রসারিত করে।
  • Android 10 অ্যাপ স্যান্ডবক্সের বাইরে ফাইল অ্যাক্সেসের জন্য SAF-কে বাধ্যতামূলক করেছে।

Storage Access Framework কী?

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 কীভাবে কাজ করে: সিস্টেম পিকার এবং URI

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 অ্যাক্সেসের জীবনচক্র

ডিফল্টভাবে, URI অ্যাপ পুনরারম্ভ বা ডিভাইস রিবুট পর্যন্ত বৈধ। দীর্ঘমেয়াদী অ্যাক্সেসের জন্য, অ্যাপ takePersistableUriPermission অনুরোধ করে — এটি ডায়ালগের মাধ্যমে পুনরায় নির্বাচন না করেই পরবর্তী লঞ্চে ফাইল পড়ার অনুমতি দেয়।

ACTION_OPEN_DOCUMENT এবং ACTION_CREATE_DOCUMENT

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

Persistent URI permissions হল একটি SAF প্রক্রিয়া যা বর্তমান সেশন শেষ হওয়ার পর ফাইলে অ্যাক্সেস বজায় রাখার অনুমতি দেয়। এই ফ্ল্যাগ ছাড়া, URI কেবল অ্যাপ পুনরারম্ভ পর্যন্ত বৈধ। অ্যাপ READ এবং WRITE ফ্ল্যাগ সহ FLAG_GRANT_PERSISTABLE_URI_PERMISSION ফ্ল্যাগ অনুরোধ করে।

অনুমতি সংরক্ষণের জন্য ContentResolver.takePersistableUriPermission পদ্ধতি ব্যবহার করা হয়। সিস্টেম URI একটি বিশেষ রেজিস্ট্রিতে সংরক্ষণ করে এবং পরবর্তী অ্যাপ লঞ্চে অ্যাক্সেস পুনরুদ্ধার করে। অ্যাপের URI-তে স্থায়ী অ্যাক্সেস আছে কিনা তা পরীক্ষা করতে, ContentResolver.persistedUriPermissions ব্যবহার করা হয়।

ব্যবহারকারী সেটিংস → অ্যাপস → অনুমতি-এর মাধ্যমে সংরক্ষিত অনুমতি প্রত্যাহার করতে পারেন। অ্যাপের এমন পরিস্থিতি সামলানো উচিত যখন ফাইলের অ্যাক্সেস অপ্রত্যাশিতভাবে হারিয়ে যায়। কাজ শুরু করার আগে ContentResolver.openInputStream-এর মাধ্যমে অ্যাক্সেস পরীক্ষা এবং SecurityException সঠিকভাবে সামলানোর পরামর্শ দেওয়া হয়।

কোড উদাহরণ: SAF-এর মাধ্যমে ফাইল নির্বাচন

SAF একটি মানক Intent-এর মাধ্যমে চালু করা হয়। কোড ন্যূনতম: ACTION_OPEN_DOCUMENT সহ Intent তৈরি করুন, MIME প্রকার নির্দিষ্ট করুন এবং ActivityResultContracts.StartActivityForResult-এর মাধ্যমে চালু করুন। ফাইল নির্বাচনের পর, callback data.data-তে URI পায়, যা পরে পড়ার জন্য ব্যবহৃত হয়।

kotlin
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-এর মাধ্যমে ফাইল তৈরি

নতুন ফাইল লেখার জন্য, ACTION_CREATE_DOCUMENT ব্যবহার করুন। Intent MIME প্রকার এবং EXTRA_TITLE-এর মাধ্যমে ফাইলের নাম গ্রহণ করে। ফোল্ডার নির্বাচন এবং নিশ্চিত করার পর, ব্যবহারকারী একটি URI ফেরত দেন যাতে অ্যাপ ContentResolver.openOutputStream-এর মাধ্যমে ডেটা লেখে। সিস্টেম স্বয়ংক্রিয়ভাবে নির্বাচিত স্থানে ফাইল তৈরি করে।

SAF বনাম READ_EXTERNAL_STORAGE

SAF প্রথাগত READ_EXTERNAL_STORAGE থেকে নিরাপত্তার প্রতি মৌলিকভাবে ভিন্ন দৃষ্টিভঙ্গিতে আলাদা। একবারে সম্পূর্ণ স্টোরেজে অ্যাক্সেস অনুরোধ করার পরিবর্তে, SAF কেবল একটি নির্দিষ্ট ফাইলে অ্যাক্সেস অনুরোধ করে। এটি আক্রমণের পৃষ্ঠকে হ্রাস করে এবং ব্যবহারকারীর আস্থা বাড়ায়।

READ_EXTERNAL_STORAGE ডিভাইসের সমস্ত ফাইলে অ্যাক্সেস দেয়, অন্যান্য অ্যাপের ফটো এবং ডকুমেন্ট সহ। Android 10+-এ, এই পদ্ধতি সীমাবদ্ধ। SAF, বিপরীতে, শুধুমাত্র ব্যবহারকারীর নির্বাচিত ফাইলে অ্যাক্সেস প্রদান করে এবং প্রতিটি ফাইলের জন্য স্পষ্ট নিশ্চিতকরণ প্রয়োজন। ব্যাচ মিডিয়া অপারেশনের জন্য MediaStore ব্যবহার করুন, পৃথক ডকুমেন্টের জন্য SAF ব্যবহার করুন।

SAF-এর প্রধান অসুবিধা হল প্রতিটি ফাইল পৃথকভাবে নির্বাচনের প্রয়োজন। বাল্ক অপারেশনের (ব্যাকআপ, ফোল্ডার সিঙ্ক্রোনাইজেশন) জন্য, ACTION_OPEN_DOCUMENT_TREE ব্যবহার করা হয়, যা নির্বাচিত ডিরেক্টরির সমস্ত ফাইলে অ্যাক্সেস দেয়। সমাধান পরিস্থিতির উপর নির্ভর করে: SAF ব্যবহারকারী নির্বাচনের জন্য সর্বোত্তম, MediaStore প্রোগ্রাম্যাটিক মিডিয়া অ্যাক্সেসের জন্য।

সচরাচর জিজ্ঞাসিত প্রশ্ন

Android-এ Storage Access Framework কী?

Storage Access Framework হল একটি Android ফ্রেমওয়ার্ক যা সিস্টেম নির্বাচন ডায়ালগের মাধ্যমে নিরাপদ ফাইল অ্যাক্সেসের জন্য। অ্যাপ স্টোরেজ পড়ার বিস্তৃত অনুমতি না চেয়ে নির্বাচিত ফাইলের জন্য content URI পায়।

SAF-এর মাধ্যমে ফাইল কীভাবে খুলবেন?

ACTION_OPEN_DOCUMENT সহ Intent তৈরি করুন, setType-এর মাধ্যমে MIME প্রকার নির্দিষ্ট করুন এবং ActivityResultContracts-এর মাধ্যমে চালু করুন। Callback-এ, data.data থেকে URI পান এবং ContentResolver.openInputStream-এর মাধ্যমে পড়ুন।

Persistent URI permissions কী?

Persistent URI permissions হল অ্যাপ পুনরারম্ভের পর URI-তে অ্যাক্সেস বজায় রাখার একটি প্রক্রিয়া। এটি FLAG_GRANT_PERSISTABLE_URI_PERMISSION ফ্ল্যাগ এবং takePersistableUriPermission পদ্ধতির মাধ্যমে অনুরোধ করা হয়।

SAF কোন MIME প্রকার সমর্থন করে?

SAF যেকোনো MIME প্রকার সমর্থন করে: application/pdf, image/*, text/plain, application/zip এবং অন্যান্য। প্রকার EXTRA_MIME_TYPES অ্যারে সহ Intent.putExtra-এর মাধ্যমে নির্দিষ্ট করা হয়।

SAF MediaStore থেকে কীভাবে আলাদা?

SAF ব্যবহারকারীর দ্বারা সিস্টেম ডায়ালগের মাধ্যমে পৃথক ফাইল নির্বাচনের জন্য ডিজাইন করা হয়েছে। MediaStore ব্যবহারকারীর অংশগ্রহণ ছাড়াই মিডিয়া ডেটাবেসের মাধ্যমে ডিভাইসের সমস্ত মিডিয়া ফাইলে প্রোগ্রাম্যাটিক অ্যাক্সেস প্রদান করে।

সারাংশ

  • Storage Access Framework হল একটি Android ফ্রেমওয়ার্ক যা বিস্তৃত অনুমতি ছাড়াই সিস্টেম পিকারের মাধ্যমে নিরাপদ ফাইল অ্যাক্সেসের জন্য।
  • Content URI ফাইল পাথ প্রতিস্থাপন করে: অ্যাপ সরাসরি file:// লিঙ্কের পরিবর্তে DocumentProvider-এর মাধ্যমে ফাইলের সাথে কাজ করে।
  • ACTION_OPEN_DOCUMENT বিদ্যমান ফাইল খোলে, ACTION_CREATE_DOCUMENT নতুন ফাইল তৈরি করে, ACTION_OPEN_DOCUMENT_TREE ফোল্ডার নির্বাচন করে।
  • Persistent permissions takePersistableUriPermission-এর মাধ্যমে অ্যাপ পুনরারম্ভের পর URI-তে অ্যাক্সেস বজায় রাখে।
  • Android 10 অ্যাপ-নির্দিষ্ট স্টোরেজের বাইরে ফাইল অ্যাক্সেসের জন্য SAF-কে বাধ্যতামূলক করেছে, READ_EXTERNAL_STORAGE সীমাবদ্ধ করেছে।
  • DocumentProvider ক্লাউড এবং কাস্টম স্টোরেজের সাথে একীকরণের জন্য SAF-কে প্রসারিত করে।
  • পছন্দ SAF এবং MediaStore-এর মধ্যে পরিস্থিতির উপর নির্ভর করে: SAF ব্যবহারকারী নির্বাচনের জন্য, MediaStore প্রোগ্রাম্যাটিক মিডিয়া অ্যাক্সেসের জন্য।

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন