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

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

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

সমস্ত ফাইলে অ্যাক্সেসের জন্য অনুরোধ করুন

একটি অ্যাপ নিম্নলিখিত উপায়ে ব্যবহারকারীর কাছ থেকে সমস্ত ফাইলের অ্যাক্সেস চাইতে পারে:

  1. ম্যানিফেস্টে MANAGE_EXTERNAL_STORAGE পারমিশনটি ঘোষণা করুন।
  2. ব্যবহারকারীদের একটি সিস্টেম সেটিংস পৃষ্ঠায় নিয়ে যেতে ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION ইন্টেন্ট অ্যাকশনটি ব্যবহার করুন, যেখানে তারা আপনার অ্যাপের জন্য নিম্নলিখিত বিকল্পটি সক্রিয় করতে পারবে: সমস্ত ফাইল পরিচালনা করার অ্যাক্সেসের অনুমতি দিন

আপনার অ্যাপকে MANAGE_EXTERNAL_STORAGE অনুমতি দেওয়া হয়েছে কিনা তা নির্ধারণ করতে, Environment.isExternalStorageManager() কল করুন।

MANAGE_EXTERNAL_STORAGE দ্বারা অনুমোদিত অপারেশনসমূহ

MANAGE_EXTERNAL_STORAGE পারমিশনটি নিম্নলিখিত অধিকার প্রদান করে:

  • শেয়ার্ড স্টোরেজের অন্তর্ভুক্ত সকল ফাইলে পঠন ও লিখন অ্যাক্সেস।

  • MediaStore.Files টেবিলের বিষয়বস্তুতে প্রবেশাধিকার।

  • ইউএসবি অন-দ্য-গো (ওটিজি) ড্রাইভ এবং এসডি কার্ড উভয়ের রুট ডিরেক্টরিতে প্রবেশাধিকার।

  • /Android/data/ , /sdcard/Android এবং /sdcard/Android এর বেশিরভাগ সাবডিরেক্টরি ছাড়া অভ্যন্তরীণ স্টোরেজের সমস্ত ডিরেক্টরিতে লেখার অ্যাক্সেস। এই লেখার অ্যাক্সেসের মধ্যে সরাসরি ফাইল পাথ অ্যাক্সেসও অন্তর্ভুক্ত।

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

যখন কোনো অ্যাপের MANAGE_EXTERNAL_STORAGE পারমিশন থাকে, তখন সেটি MediaStore API অথবা সরাসরি ফাইল পাথ ব্যবহার করে এই অতিরিক্ত ফাইল ও ডিরেক্টরিগুলো অ্যাক্সেস করতে পারে। কিন্তু, যখন আপনি Storage Access Framework ব্যবহার করেন, তখন আপনি কেবল তখনই কোনো ফাইল বা ডিরেক্টরি অ্যাক্সেস করতে পারবেন, যদি MANAGE_EXTERNAL_STORAGE পারমিশন ছাড়াই তা করা সম্ভব হয়।

অন্য অ্যাপের স্টোরেজ ব্যবস্থাপনা কার্যকলাপ চালু করুন

অ্যান্ড্রয়েড ১২ (এপিআই লেভেল ৩১) এবং এর পরবর্তী সংস্করণগুলোতে, যেসব অ্যাপের MANAGE_EXTERNAL_STORAGE এবং QUERY_ALL_PACKAGES উভয় পারমিশন রয়েছে—যেমন ফাইল ম্যানেজমেন্ট অ্যাপ—তারা ব্যবহারকারীদের অন্য কোনো অ্যাপের কাস্টম স্পেস ম্যানেজমেন্ট অ্যাক্টিভিটিতে পাঠানোর জন্য getManageSpaceActivityIntent() ব্যবহার করতে পারে।

getManageSpaceActivityIntent() মেথডটি একটি প্যাকেজ নাম এবং একটি রিকোয়েস্ট কোড গ্রহণ করে এবং নিম্নলিখিতগুলির মধ্যে একটি রিটার্ন করে:

  • একটি PendingIntent , যদি নির্দিষ্ট প্যাকেজ নামের অ্যাপটি একটি কাস্টম "ম্যানেজ স্পেস" অ্যাক্টিভিটি সংজ্ঞায়িত করে থাকে। যে ফাইল ম্যানেজমেন্ট অ্যাপটি getManageSpaceActivityIntent() মেথডটি কল করেছে, সেটি তখন ব্যবহারকারীদের কাস্টম অ্যাক্টিভিটিতে পাঠানোর জন্য ফেরত আসা ইন্টেন্টটি ইনভোক করতে পারে।
  • null , যদি নির্দিষ্ট প্যাকেজ নামের অ্যাপটিতে কোনো 'ম্যানেজ স্পেস' অ্যাক্টিভিটি সংজ্ঞায়িত না থাকে।

পরীক্ষার জন্য MANAGE_EXTERNAL_STORAGE সক্রিয় করুন

MANAGE_EXTERNAL_STORAGE পারমিশনটি আপনার অ্যাপকে কীভাবে প্রভাবিত করে তা খতিয়ে দেখতে, আপনি পরীক্ষার জন্য পারমিশনটি সক্রিয় করতে পারেন। এটি করার জন্য, আপনার টেস্ট ডিভাইসের সাথে সংযুক্ত মেশিনটিতে নিম্নলিখিত কমান্ডটি চালান:

adb shell appops set --uid PACKAGE_NAME MANAGE_EXTERNAL_STORAGE allow

গুগল প্লে বিজ্ঞপ্তি

এই বিভাগে গুগল প্লে-তে অ্যাপ প্রকাশকারী ডেভেলপারদের জন্য একটি বিজ্ঞপ্তি দেওয়া হয়েছে।

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

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

চিত্র ১. অ্যান্ড্রয়েড স্টুডিও-তে একটি লিন্ট সতর্কতা যা ডেভেলপারদের MANAGE_EXTERNAL_STORAGE পারমিশন সংক্রান্ত গুগল প্লে-র নীতি সম্পর্কে স্মরণ করিয়ে দেয়।

শুধুমাত্র তখনই MANAGE_EXTERNAL_STORAGE পারমিশনটির জন্য অনুরোধ করুন, যখন আপনার অ্যাপ Storage Access Framework বা Media Store API-এর মতো আরও গোপনীয়তা-বান্ধব API-গুলো কার্যকরভাবে ব্যবহার করতে পারে না। আপনার অ্যাপে পারমিশনটির ব্যবহার অবশ্যই অনুমোদিত ব্যবহারের মধ্যে থাকতে হবে এবং অ্যাপটির মূল কার্যকারিতার সাথে সরাসরি যুক্ত থাকতে হবে। যদি আপনার অ্যাপে নিম্নলিখিতগুলির মতো কোনো ব্যবহারের ক্ষেত্র (use case) অন্তর্ভুক্ত থাকে, তাহলে সম্ভবত এটি MANAGE_EXTERNAL_STORAGE পারমিশনটির জন্য অনুরোধ করতে পারবে:

  • ফাইল ম্যানেজার
  • অ্যাপগুলির ব্যাকআপ এবং পুনরুদ্ধার করুন
  • অ্যান্টি-ভাইরাস অ্যাপ
  • ডকুমেন্ট ম্যানেজমেন্ট অ্যাপস
  • ডিভাইসে ফাইল অনুসন্ধান
  • ডিস্ক এবং ফাইল এনক্রিপশন
  • ডিভাইস থেকে ডিভাইসে ডেটা স্থানান্তর