Android 11-এ স্টোরেজ আপডেট

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

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

সীমিত স্টোরেজ প্রয়োগ

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

অ্যান্ড্রয়েড ১০ এর সাথে সামঞ্জস্য বজায় রাখুন

যদি আপনার অ্যাপ অ্যান্ড্রয়েড ১০ ডিভাইসে চলার সময় স্কোপড স্টোরেজ ব্যবহার না করে, তবে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে requestLegacyExternalStorage true তে সেট করে রাখার পরামর্শ দেওয়া হচ্ছে। এর ফলে, আপনার অ্যাপ অ্যান্ড্রয়েড ১০ চালিত ডিভাইসগুলোতে প্রত্যাশিতভাবে কাজ করতে পারবে।

স্কোপড স্টোরেজ ব্যবহার করার সময় দৃশ্যমান ডিরেক্টরিগুলিতে ডেটা স্থানান্তর করুন।

আপনার অ্যাপ যদি লিগ্যাসি স্টোরেজ মডেল ব্যবহার করে এবং পূর্বে অ্যান্ড্রয়েড ১০ বা তার নিচের সংস্করণকে টার্গেট করে থাকে, তাহলে স্কোপড স্টোরেজ মডেল চালু করা হলে আপনি এমন কোনো ডিরেক্টরিতে ডেটা সংরক্ষণ করতে পারেন, যা আপনার অ্যাপের নাগালের বাইরে থাকবে। অ্যান্ড্রয়েড ১১ টার্গেট করার আগে, ডেটা এমন একটি ডিরেক্টরিতে স্থানান্তর করুন যা স্কোপড স্টোরেজের সাথে সামঞ্জস্যপূর্ণ।

পরীক্ষার পরিধিভুক্ত স্টোরেজ

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

  • DEFAULT_SCOPED_STORAGE (ডিফল্টরূপে সকল অ্যাপের জন্য সক্রিয়)
  • FORCE_ENABLE_SCOPED_STORAGE (ডিফল্টরূপে সকল অ্যাপের জন্য নিষ্ক্রিয়)

স্কোপড স্টোরেজ নিষ্ক্রিয় করতে এবং এর পরিবর্তে লিগ্যাসি স্টোরেজ মডেল ব্যবহার করতে, উভয় ফ্ল্যাগই আনসেট করুন

ডিভাইস স্টোরেজ পরিচালনা করুন

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

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

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

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

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

ব্যবহারকারীর গোপনীয়তা বজায় রেখে মিডিয়া অ্যাক্সেস আরও সহজ করতে অ্যান্ড্রয়েড ১১ নিম্নলিখিত বৈশিষ্ট্যগুলো যোগ করেছে।

ব্যাচ অপারেশন সম্পাদন করুন

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

সরাসরি ফাইল পাথ এবং নেটিভ লাইব্রেরি ব্যবহার করে ফাইল অ্যাক্সেস করুন

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

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

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

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

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

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

অ্যান্ড্রয়েড ১১ এই সীমাবদ্ধতাটিকে আরও প্রসারিত করেছে। আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১১-কে টার্গেট করে, তবে এটি অন্য কোনো অ্যাপের ডেটা ডিরেক্টরির ফাইলগুলো অ্যাক্সেস করতে পারবে না, এমনকি যদি অন্য অ্যাপটি অ্যান্ড্রয়েড ৮.১ (এপিআই লেভেল ২৭) বা তার চেয়ে নিম্ন সংস্করণকে টার্গেট করে এবং তার ডেটা ডিরেক্টরির ফাইলগুলোকে ওয়ার্ল্ড-রিডেবল করেও থাকে।

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

অ্যান্ড্রয়েড ১১-এ, অ্যাপগুলো এখন আর এক্সটার্নাল স্টোরেজের মধ্যে থাকা অন্য কোনো অ্যাপের নিজস্ব ডিরেক্টরির ফাইল অ্যাক্সেস করতে পারবে না।

নথি অ্যাক্সেস সীমাবদ্ধতা

ডেভেলপারদের পরীক্ষার জন্য সময় দেওয়ার উদ্দেশ্যে, স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) সম্পর্কিত নিম্নলিখিত পরিবর্তনগুলি কেবল তখনই কার্যকর হবে, যদি আপনার অ্যাপটি অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণকে টার্গেট করে।

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

আপনি এখন থেকে নিম্নলিখিত ডিরেক্টরিগুলিতে অ্যাক্সেসের অনুরোধ করার জন্য 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 অ্যাপ সামঞ্জস্যতা ফ্ল্যাগটি সক্রিয় করুন।
    • অ্যান্ড্রয়েড ১১ বা তার উচ্চতর সংস্করণকে লক্ষ্য করুন।
  3. ACTION_OPEN_DOCUMENT_TREE অ্যাকশনটি ব্যবহার করে একটি ইন্টেন্ট চালু করুন। পরীক্ষা করে দেখুন যে Download ডিরেক্টরিটি দেখা যাচ্ছে এবং ডিরেক্টরিটির সাথে যুক্ত অ্যাকশন বাটনটি ধূসর হয়ে আছে।

অনুমতি

অ্যান্ড্রয়েড ১১ স্টোরেজ পারমিশন সংক্রান্ত নিম্নলিখিত পরিবর্তনগুলো এনেছে।

যেকোনো সংস্করণ লক্ষ্য করুন

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

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

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

    ব্যবহারকারীরা সিস্টেম সেটিংসে দেখতে পারেন কোন কোন অ্যাপের READ_EXTERNAL_STORAGE পারমিশন আছে। সেটিংস > প্রাইভেসি > পারমিশন ম্যানেজার > ফাইলস অ্যান্ড মিডিয়া পেজে, পারমিশন থাকা প্রতিটি অ্যাপকে ‘Allowed for all files’-এর অধীনে তালিকাভুক্ত করা থাকে। আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১১-এর জন্য তৈরি হয়, তবে মনে রাখবেন যে ‘সমস্ত ফাইল’-এর এই অ্যাক্সেসটি শুধুমাত্র পড়ার (read-only) জন্য। এই অ্যাপটি ব্যবহার করে শেয়ার্ড স্টোরেজের সমস্ত ফাইল পড়তে ও লিখতে হলে, আপনার ‘ all files’ অ্যাক্সেস পারমিশন থাকা প্রয়োজন।

টার্গেট অ্যান্ড্রয়েড ১১

আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১১-কে টার্গেট করে, তাহলে WRITE_EXTERNAL_STORAGE পারমিশন এবং WRITE_MEDIA_STORAGE প্রিভিলেজড পারমিশন উভয়ই আর কোনো অতিরিক্ত অ্যাক্সেস প্রদান করে না।

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

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

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

অতিরিক্ত সম্পদ

অ্যান্ড্রয়েড ১১-এ স্টোরেজের পরিবর্তন সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উপকরণগুলি দেখুন:

ব্লগ পোস্ট

ভিডিও