Android 11-এ স্টোরেজ সংক্রান্ত আপডেট

Android ১১ (API লেভেল ৩০) প্ল্যাটফর্মকে আরও উন্নত করে, এক্সটার্নাল স্টোরেজে অ্যাপ ও ব্যবহারকারীর ডেটাকে আরও ভালভাবে সুরক্ষিত করে। এই রিলিজে র ফাইল পাথ অ্যাক্সেস, মিডিয়ার জন্য ব্যাচ এডিট অপারেশন এবং স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্কের জন্য আপডেট করা UI-এর মতো বেশ কিছু উন্নতি করা হয়েছে।

এছাড়াও, এই রিলিজে স্কোপড স্টোরেজ উন্নত করা হয়েছে, যার ফলে ডেভেলপাররা এই স্টোরেজ মডেলে মাইগ্রেট করার পরে তাদের স্টোরেজ ব্যবহারের কেস আরও সহজে পূরণ করতে পারবেন।

স্কোপড স্টোরেজ এনফোর্সমেন্ট

Android 11-এ চলে কিন্তু Android 10 (API লেভেল ২৯) টার্গেট করে এমন অ্যাপ এখনও requestLegacyExternalStorage অ্যাট্রিবিউটের জন্য অনুরোধ করতে পারে। এই ফ্ল্যাগ অ্যাপকে স্কোপড স্টোরেজের সাথে সম্পর্কিত পরিবর্তন থেকে সাময়িকভাবে অপ্ট-আউট করার অনুমতি দেয়, যেমন বিভিন্ন ডিরেক্টরি এবং বিভিন্ন ধরনের মিডিয়া ফাইলে অ্যাক্সেস প্রদান করা। Android ১১-কে টার্গেট করার জন্য আপনার অ্যাপ আপডেট করার পরে, সিস্টেম requestLegacyExternalStorage ফ্ল্যাগকে উপেক্ষা করে।

Android 10-এর সাথে কম্প্যাটিবিলিটি বজায় রাখা

Android 10 ডিভাইসে চালানোর সময় আপনার অ্যাপ যদি স্কোপড স্টোরেজ থেকে অপ্ট-আউট করে, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে requestLegacyExternalStorage-কে true-এ সেট করা চালিয়ে যাওয়ার সাজেশন দেওয়া হয়। এর ফলে, Android 10-এ চলে এমন ডিভাইসে আপনার অ্যাপ প্রত্যাশা অনুযায়ী কাজ করা চালিয়ে যেতে পারবে।

স্কোপড স্টোরেজ ব্যবহার করার সময় দেখা যায় এমন ডিরেক্টরিতে ডেটা মাইগ্রেট করুন

আপনার অ্যাপ যদি লিগ্যাসি স্টোরেজ মডেল ব্যবহার করে এবং আগে Android 10 বা তার নিম্নতর ভার্সনকে টার্গেট করে থাকে, তাহলে আপনি এমন কোনও ডিরেক্টরিতে ডেটা স্টোর করতে পারেন যা স্কোপড স্টোরেজ মডেল চালু থাকলে আপনার অ্যাপ অ্যাক্সেস করতে পারবে না। Android ১১ টার্গেট করার আগে, স্কোপড স্টোরেজের সাথে মানানসই একটি ডিরেক্টরিতে ডেটা মাইগ্রেট করুন।

স্কোপড স্টোরেজ পরীক্ষা করুন

আপনার অ্যাপের টার্গেট SDK ভার্সন এবং ম্যানিফেস্ট ফ্ল্যাগ ভ্যালু যাই হোক না কেন, আপনার অ্যাপে স্কোপড স্টোরেজ চালু করতে, নিম্নলিখিত অ্যাপ কম্প্যাটিবিলিটি ফ্ল্যাগ চালু করুন:

  • DEFAULT_SCOPED_STORAGE (ডিফল্ট হিসেবে সব অ্যাপের জন্য চালু করা আছে)
  • FORCE_ENABLE_SCOPED_STORAGE (ডিফল্ট হিসেবে সব অ্যাপের জন্য বন্ধ করা আছে)

স্কোপড স্টোরেজ বন্ধ করতে এবং পরিবর্তে লিগ্যাসি স্টোরেজ মডেল ব্যবহার করতে, দুটি ফ্ল্যাগই আনসেট করুন।

ডিভাইস স্টোরেজ ম্যানেজ করুন

Android 11 থেকে শুরু করে, যেসব অ্যাপ স্কোপড স্টোরেজ মডেল ব্যবহার করে সেগুলি শুধুমাত্র তাদের নিজস্ব অ্যাপ-নির্দিষ্ট ক্যাশে ফাইল অ্যাক্সেস করতে পারে। আপনার অ্যাপকে ডিভাইস স্টোরেজ ম্যানেজ করতে হলে, কীভাবে ফাঁকা জায়গা কোয়েরি করতে হয় সেই সংক্রান্ত নির্দেশাবলী অনুসরণ করুন।

  1. ACTION_MANAGE_STORAGE ইনটেন্ট অ্যাকশন চালু করে খালি জায়গা চেক করুন।
  2. ডিভাইসে পর্যাপ্ত ফ্রি স্পেস না থাকলে, ব্যবহারকারীকে আপনার অ্যাপকে সব ক্যাশে মুছে ফেলার অনুমতি দিতে প্রম্পট করুন। এটি করতে, ACTION_CLEAR_APP_CACHE ইনটেন্ট অ্যাকশন চালু করুন।

এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরি

Android 11 থেকে শুরু করে, অ্যাপগুলি এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরি তৈরি করতে পারে না। আপনার অ্যাপের জন্য সিস্টেম যে ডিরেক্টরি প্রদান করে তা অ্যাক্সেস করতে, getExternalFilesDirs()-এ কল করুন।

মিডিয়া ফাইল অ্যাক্সেস

ব্যবহারকারীর গোপনীয়তা বজায় রেখে মিডিয়া অ্যাক্সেস করার সুবিধা আরও সহজ করতে, Android 11-এ নিম্নলিখিত ক্ষমতা যোগ করা হয়েছে।

ব্যাচ অপারেশন পারফর্ম করো

বিভিন্ন ডিভাইস জুড়ে সামঞ্জস্য বজায় রাখতে এবং ব্যবহারকারীর সুবিধা আরও বাড়াতে, Android 11-এ এমন কিছু পদ্ধতি যোগ করা হয়েছে যার মাধ্যমে মিডিয়া ফাইলের গ্রুপ ম্যানেজ করা আরও সহজ হয়।

ডাইরেক্ট ফাইল পাথ ও নেটিভ লাইব্রেরি ব্যবহার করে ফাইল অ্যাক্সেস করা

থার্ড-পার্টি মিডিয়া লাইব্রেরির সাথে আপনার অ্যাপ যাতে আরও মসৃণভাবে কাজ করতে পারে, সেই জন্য Android 11 আপনাকে MediaStore API ছাড়া অন্য API ব্যবহার করার অনুমতি দেয়, যাতে আপনি ডাইরেক্ট ফাইল পাথ ব্যবহার করে শেয়ার করা স্টোরেজ থেকে মিডিয়া ফাইল অ্যাক্সেস করতে পারেন। এইসব API-এর মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:

  • File API.
  • নেটিভ লাইব্রেরি, যেমন fopen()।

অন্যান্য অ্যাপ থেকে ডেটা অ্যাক্সেস করা

ব্যবহারকারীর গোপনীয়তা সুরক্ষিত রাখতে, Android ১১ বা তার পরবর্তী ভার্সন চালানো ডিভাইসে, সিস্টেম আপনার অ্যাপের অন্যান্য অ্যাপের ব্যক্তিগত ডিরেক্টরি অ্যাক্সেস করার সুবিধা আরও সীমিত করে।

অভ্যন্তরীণ স্টোরেজে ডেটা ডিরেক্টরি অ্যাক্সেস করুন

Android 9 (API লেভেল ২৮) থেকে শুরু করে, কোন কোন অ্যাপ ইন্টার্নাল স্টোরেজের ডেটা ডিরেক্টরিতে থাকা ফাইলগুলি অন্যান্য অ্যাপের জন্য অ্যাক্সেসযোগ্য করে তুলতে পারবে, তার উপর বিধিনিষেধ আরোপ করা শুরু হয়েছে। Android 9 বা তার পরবর্তী ভার্সনকে টার্গেট করে এমন অ্যাপ তাদের ডেটা ডিরেক্টরিতে থাকা ফাইলগুলিকে সবার জন্য অ্যাক্সেসযোগ্য করতে পারে না।

Android ১১ এই বিধিনিষেধ আরও বাড়ায়। আপনার অ্যাপ Android 11-কে টার্গেট করলে, এটি অন্য কোনও অ্যাপের ডেটা ডিরেক্টরির ফাইল অ্যাক্সেস করতে পারবে না, এমনকি অন্য অ্যাপটি Android 8.1 (API লেভেল 27) বা তার নিচের ভার্সনকে টার্গেট করলেও এবং এর ডেটা ডিরেক্টরির ফাইলগুলি সকলের জন্য পাঠযোগ্য করে তুললেও।

এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরি অ্যাক্সেস করা

Android 11-এ, অ্যাপগুলি আর এক্সটার্নাল স্টোরেজের মধ্যে অন্য কোনও অ্যাপের ডেডিকেটেড, অ্যাপ-নির্দিষ্ট ডিরেক্টরি-তে ফাইল অ্যাক্সেস করতে পারবে না।

ডকুমেন্ট অ্যাক্সেস সংক্রান্ত বিধিনিষেধ

ডেভেলপারদের পরীক্ষা করার জন্য সময় দিতে, Storage Access Framework (SAF) সম্পর্কিত নিম্নলিখিত পরিবর্তনগুলি তখনই কার্যকর হবে যদি আপনার অ্যাপ Android ১১ বা তার পরবর্তী ভার্সনকে টার্গেট করে।

ডিরেক্টরিতে অ্যাক্সেস

আপনি আর ACTION_OPEN_DOCUMENT_TREE ইনটেন্ট অ্যাকশন ব্যবহার করে নিম্নলিখিত ডিরেক্টরি অ্যাক্সেস করার অনুরোধ করতে পারবেন না:

  • ইন্টার্নাল স্টোরেজ ভলিউমের রুট ডিরেক্টরি।
  • প্রতিটি এসডি কার্ড ভলিউমের রুট ডিরেক্টরি যা ডিভাইস প্রস্তুতকারক নির্ভরযোগ্য বলে মনে করে, কার্ডটি এমুলেট করা বা অপসারণযোগ্য কিনা তা নির্বিশেষে। একটি নির্ভরযোগ্য ভলিউম হল এমন একটি ভলিউম যা কোনও অ্যাপ বেশিরভাগ সময় সফলভাবে অ্যাক্সেস করতে পারে।
  • Download ডিরেক্টরি।

ফাইলে অ্যাক্সেস

আপনি আর ACTION_OPEN_DOCUMENT_TREE বা ACTION_OPEN_DOCUMENT ইনটেন্ট অ্যাকশন ব্যবহার করে ব্যবহারকারীকে নিম্নলিখিত ডিরেক্টরি থেকে আলাদা আলাদা ফাইল বেছে নেওয়ার অনুরোধ করতে পারবেন না:

  • Android/data/ ডিরেক্টরি এবং সব সাবডিরেক্টরি।
  • Android/obb/ ডিরেক্টরি এবং সব সাবডিরেক্টরি।

পরিবর্তনটি পরীক্ষা করুন

এই আচরণগত পরিবর্তন পরীক্ষা করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ACTION_OPEN_DOCUMENT অ্যাকশনের মাধ্যমে ইনটেন্ট চালু করুন। Android/data/ এবং Android/obb/ ডিরেক্টরি দুটিই দেখা যাচ্ছে না তা চেক করুন।
  2. নিম্নলিখিতগুলির মধ্যে থেকে যেকোনও একটি করুন:
    • RESTRICT_STORAGE_ACCESS_FRAMEWORK অ্যাপের কম্প্যাটিবিলিটি ফ্ল্যাগ চালু করুন।
    • Android 11 বা এর পরের যেকোনও ভার্সনকে টার্গেট করুন।
  3. ACTION_OPEN_DOCUMENT_TREE অ্যাকশনের মাধ্যমে ইনটেন্ট চালু করুন। Download ডিরেক্টরি দেখা যাচ্ছে কিনা এবং ডিরেক্টরির সাথে যুক্ত অ্যাকশন বোতামটি গ্রে-আউট হয়ে গেছে কিনা তা চেক করুন।

অনুমতি

Android 11-এ স্টোরেজ সংক্রান্ত অনুমতির ক্ষেত্রে নিম্নলিখিত পরিবর্তনগুলি করা হয়েছে।

যেকোনও ভার্সন টার্গেট করুন

প্রথম ডায়ালগে সেটিংসে অনুমতি দিন নামে একটি লিঙ্ক থাকে
ছবি ১. কোনও অ্যাপ স্কোপড স্টোরেজ ব্যবহার করলে এবং READ_EXTERNAL_STORAGE অনুমতি চাইলে ডায়ালগ দেখানো হয়।

আপনার অ্যাপের টার্গেট SDK ভার্সন যাই হোক না কেন, Android 11-এ নিম্নলিখিত পরিবর্তনগুলি কার্যকর হয়:

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

    ব্যবহারকারীরা সিস্টেম সেটিংসে দেখতে পারবেন যে কোন কোন অ্যাপের READ_EXTERNAL_STORAGE অনুমতি আছে। সেটিংস > গোপনীয়তা > পার্মিশন ম্যানেজার > ফাইল এবং মিডিয়া পৃষ্ঠায়, অনুমতি আছে এমন প্রতিটি অ্যাপ সব ফাইলের জন্য অনুমতি দেওয়া হয়েছে বিকল্পের অধীনে তালিকাভুক্ত করা হয়। আপনার অ্যাপ যদি Android 11-কে টার্গেট করে, তাহলে মনে রাখবেন যে "সব ফাইল" অ্যাক্সেস করার এই সুবিধাটি শুধুমাত্র পড়ার জন্য। এই অ্যাপ ব্যবহার করে শেয়ার করা স্টোরেজে থাকা সব ফাইল পড়তে ও লিখতে, আপনার কাছে সব ফাইল অ্যাক্সেস করার অনুমতি থাকতে হবে।

টার্গেট Android 11

আপনার অ্যাপ Android 11-কে টার্গেট করলে, WRITE_EXTERNAL_STORAGE অনুমতি এবং WRITE_MEDIA_STORAGE বিশেষাধিকার অনুমতি আর কোনও অতিরিক্ত অ্যাক্সেস প্রদান করে না।

মনে রাখবেন, Android 10 (API লেভেল ২৯) বা তার চেয়ে উন্নত ভার্সন চলে এমন ডিভাইসে, আপনার অ্যাপ স্টোরেজ সম্পর্কিত কোনও অনুমতি না চেয়েই MediaStore.Downloads-এর মতো সুনির্দিষ্ট মিডিয়া সংগ্রহে কন্ট্রিবিউট করতে পারে। আপনার অ্যাপে মিডিয়া ফাইল নিয়ে কাজ করার সময় কীভাবে শুধুমাত্র প্রয়োজনীয় অনুমতির জন্য অনুরোধ করবেন সেই সম্পর্কে আরও জানুন।

সব ফাইলে অ্যাক্সেস

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

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

Android 11-এ স্টোরেজে হওয়া পরিবর্তন সম্পর্কে আরও জানতে, নিম্নলিখিত তথ্য দেখুন:

ব্লগ পোস্ট

ভিডিও