অ্যান্ড্রয়েড স্টোরেজ ব্যবহারের ক্ষেত্রে এবং সর্বোত্তম অনুশীলন

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

অনেক ক্ষেত্রে, আপনার অ্যাপ এমন ফাইল তৈরি করে যেগুলোতে অন্য অ্যাপের অ্যাক্সেস করার প্রয়োজন নেই, বা করা উচিত নয়। এই ধরনের ফাইলগুলো পরিচালনা করার জন্য সিস্টেম অ্যাপ-নির্দিষ্ট স্টোরেজ লোকেশন প্রদান করে।

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

মিডিয়া ফাইলগুলি পরিচালনা করুন

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

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

একাধিক ফোল্ডার থেকে ছবি বা ভিডিও ফাইল দেখান

query() API ব্যবহার করে একটি মিডিয়া কালেকশন কোয়েরি করুন । মিডিয়া ফাইলগুলো ফিল্টার বা সর্ট করতে ` projection , selection , selectionArgs , এবং sortOrder প্যারামিটারগুলো অ্যাডজাস্ট করুন।

একটি নির্দিষ্ট ফোল্ডার থেকে ছবি বা ভিডিও দেখান

এই পদ্ধতিটি ব্যবহার করুন:

  1. অ্যাপ অনুমতি অনুরোধ (Request App Permissions)- এ বর্ণিত সর্বোত্তম অনুশীলনগুলি অনুসরণ করে, READ_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. MediaColumns.DATA এর মানের উপর ভিত্তি করে মিডিয়া ফাইলগুলো পুনরুদ্ধার করুন, যেখানে ডিস্কে থাকা মিডিয়া আইটেমটির অ্যাবসোলিউট ফাইলসিস্টেম পাথ থাকে।

দ্রষ্টব্য: যখন আপনি কোনো বিদ্যমান মিডিয়া ফাইল অ্যাক্সেস করেন, তখন আপনার লজিকে DATA কলামের মান ব্যবহার করতে পারেন। এর কারণ হলো, এই মানটিতে একটি বৈধ ফাইল পাথ থাকে। তবে, ফাইলটি সবসময় পাওয়া যাবে এমনটা ধরে নেবেন না। ঘটতে পারে এমন যেকোনো ফাইল-ভিত্তিক I/O ত্রুটি সামলানোর জন্য প্রস্তুত থাকুন।

অন্যদিকে, কোনো মিডিয়া ফাইল তৈরি বা আপডেট করতে DATA কলামটি ব্যবহার করবেন না। এর পরিবর্তে DISPLAY_NAME এবং RELATIVE_PATH কলামগুলো ব্যবহার করুন।

ছবি থেকে অবস্থানের তথ্য অ্যাক্সেস করুন

আপনার অ্যাপ যদি স্কোপড স্টোরেজ ব্যবহার করে, তাহলে মিডিয়া স্টোরেজ গাইডের ' ফটোগ্রাফের অবস্থান তথ্য ' বিভাগে দেওয়া ধাপগুলো অনুসরণ করুন।

নতুন ডাউনলোডের জন্য স্টোরেজ অবস্থান নির্ধারণ করুন

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

যদি অন্যান্য অ্যাপের ফাইল অ্যাক্সেসের প্রয়োজন হয়, তাহলে ডাউনলোডের জন্য সুনির্দিষ্ট মিডিয়া কালেকশন বা ডকুমেন্ট কালেকশন ব্যবহার করার কথা বিবেচনা করুন।

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

ব্যবহারকারীর মিডিয়া ফাইলগুলি একটি ডিভাইসে রপ্তানি করুন

ব্যবহারকারীর মিডিয়া ফাইল সংরক্ষণের জন্য একটি উপযুক্ত ডিফল্ট অবস্থান নির্ধারণ করুন:

একই অপারেশনে একাধিক মিডিয়া ফাইল পরিবর্তন বা মুছে ফেলুন

আপনার অ্যাপটি যে অ্যান্ড্রয়েড সংস্করণগুলিতে চলে, তার উপর ভিত্তি করে লজিক অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড ১১-এ চালিত

এই পদ্ধতিটি ব্যবহার করুন:

  1. আপনার অ্যাপের লেখা বা মোছার অনুরোধের জন্য MediaStore.createWriteRequest() বা MediaStore.createTrashRequest() ব্যবহার করে একটি পেন্ডিং ইন্টেন্ট তৈরি করুন এবং তারপর সেই ইন্টেন্টটি কল করে ব্যবহারকারীর কাছে একগুচ্ছ ফাইল সম্পাদনা করার অনুমতি চান।
  2. ব্যবহারকারীর প্রতিক্রিয়া মূল্যায়ন করুন:

    • অনুমতি দেওয়া হয়ে থাকলে, পরিবর্তন বা মুছে ফেলার কাজটি সম্পন্ন করুন।
    • যদি অনুমতি না দেওয়া হয়ে থাকে, তাহলে ব্যবহারকারীকে ব্যাখ্যা করুন কেন আপনার অ্যাপের ফিচারটির জন্য অনুমতি প্রয়োজন।

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

অ্যান্ড্রয়েড ১০-এ চালিত

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

অ্যান্ড্রয়েড ৯ বা তার নিম্ন সংস্করণে চালিত

এই পদ্ধতিটি ব্যবহার করুন:

  1. অ্যাপ অনুমতি অনুরোধ (Request App Permissions)- এ বর্ণিত সর্বোত্তম অনুশীলনগুলি অনুসরণ করে, WRITE_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. মিডিয়া ফাইলগুলো পরিবর্তন বা মুছে ফেলার জন্য MediaStore API ব্যবহার করুন।

আগে থেকে বিদ্যমান একটিমাত্র ছবি ইম্পোর্ট করুন।

যখন আপনি আগে থেকে বিদ্যমান কোনো একটি ছবি ইম্পোর্ট করতে চান (উদাহরণস্বরূপ, কোনো ব্যবহারকারীর প্রোফাইলের ছবি হিসেবে ব্যবহারের জন্য), তখন আপনার অ্যাপটি এই কাজের জন্য তার নিজস্ব UI অথবা সিস্টেম পিকার ব্যবহার করতে পারে।

আপনার নিজস্ব ইউজার ইন্টারফেস উপস্থাপন করুন

এই পদ্ধতিটি ব্যবহার করুন:

  1. অ্যাপ অনুমতি অনুরোধ (Request App Permissions)- এ বর্ণিত সর্বোত্তম অনুশীলনগুলি অনুসরণ করে, READ_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. একটি মিডিয়া কালেকশন কোয়েরি করতে query() API ব্যবহার করুন।
  3. আপনার অ্যাপের কাস্টম UI-তে ফলাফলগুলো প্রদর্শন করুন।

সিস্টেম পিকার ব্যবহার করুন

ACTION_GET_CONTENT ইন্টেন্টটি ব্যবহার করুন, যা ব্যবহারকারীকে ইম্পোর্ট করার জন্য একটি ছবি বেছে নিতে বলে।

সিস্টেম পিকার ব্যবহারকারীকে বেছে নেওয়ার জন্য যে ধরনের ছবিগুলো দেখায়, সেগুলোকে ফিল্টার করতে চাইলে আপনি setType() অথবা EXTRA_MIME_TYPES ব্যবহার করতে পারেন।

একটি ছবি তুলুন

যখন আপনি আপনার অ্যাপে ব্যবহারের জন্য একটিমাত্র ছবি তুলতে চান (উদাহরণস্বরূপ, কোনো ব্যবহারকারীর প্রোফাইলের ছবি হিসেবে), তখন ব্যবহারকারীকে ডিভাইসের ক্যামেরা দিয়ে একটি ছবি তুলতে বলার জন্য ACTION_IMAGE_CAPTURE ইন্টেন্টটি ব্যবহার করুন। সিস্টেম তোলা ছবিটি MediaStore.Images টেবিলে সংরক্ষণ করে।

অন্যান্য অ্যাপের সাথে মিডিয়া ফাইল শেয়ার করুন

MediaStore-এ সরাসরি রেকর্ড যোগ করতে insert() মেথডটি ব্যবহার করুন। আরও তথ্যের জন্য, মিডিয়া স্টোরেজ গাইডের ' একটি আইটেম যোগ করুন' অংশটি দেখুন।

একটি নির্দিষ্ট অ্যাপের মাধ্যমে মিডিয়া ফাইল শেয়ার করুন

ফাইল শেয়ারিং সেট আপ করার নির্দেশিকায় বর্ণিত পদ্ধতি অনুযায়ী অ্যান্ড্রয়েড FileProvider কম্পোনেন্টটি ব্যবহার করুন।

সরাসরি ফাইল পাথ ব্যবহার করে এমন কোড বা লাইব্রেরি থেকে ফাইল অ্যাক্সেস করুন।

আপনার অ্যাপটি যে অ্যান্ড্রয়েড সংস্করণগুলিতে চলে, তার উপর ভিত্তি করে লজিক অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড ১১-এ চালিত

এই পদ্ধতিটি ব্যবহার করুন:

  1. অ্যাপ অনুমতি অনুরোধ (Request App Permissions)- এ বর্ণিত সর্বোত্তম অনুশীলনগুলি অনুসরণ করে, READ_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. সরাসরি ফাইল পাথ ব্যবহার করে ফাইলগুলো অ্যাক্সেস করুন।

আরও তথ্যের জন্য, সরাসরি ফাইল পাথ ব্যবহার করে কীভাবে মিডিয়া ফাইল খুলতে হয়, সেই অংশটি দেখুন।

অ্যান্ড্রয়েড ১০-এ চালিত

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

অ্যান্ড্রয়েড ৯ বা তার নিম্ন সংস্করণে চালিত

এই পদ্ধতিটি ব্যবহার করুন:

  1. অ্যাপ অনুমতি অনুরোধ (Request App Permissions)- এ বর্ণিত সর্বোত্তম অনুশীলনগুলি অনুসরণ করে, WRITE_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. সরাসরি ফাইল পাথ ব্যবহার করে ফাইলগুলো অ্যাক্সেস করুন।

নন-মিডিয়া ফাইলগুলি পরিচালনা করুন

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

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

একটি ডকুমেন্ট ফাইল খুলুন

সিস্টেম পিকার ব্যবহার করে খোলার জন্য ব্যবহারকারীকে একটি ফাইল বেছে নিতে বলার জন্য ACTION_OPEN_DOCUMENT ইন্টেন্টটি ব্যবহার করুন। সিস্টেম পিকার ব্যবহারকারীকে বেছে নেওয়ার জন্য যে ধরনের ফাইলগুলো দেখাবে, সেগুলোকে যদি আপনি ফিল্টার করতে চান, তাহলে আপনি setType() বা EXTRA_MIME_TYPES ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, আপনি নিম্নলিখিত কোডটি ব্যবহার করে সমস্ত PDF, ODT, এবং TXT ফাইল খুঁজে পেতে পারেন:

কোটলিন

startActivityForResult(
        Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
            addCategory(Intent.CATEGORY_OPENABLE)
            type = "*/*"
            putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
                    "application/pdf", // .pdf
                    "application/vnd.oasis.opendocument.text", // .odt
                    "text/plain" // .txt
            ))
        },
        REQUEST_CODE
      )

জাভা

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("*/*");
        intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
                "application/pdf", // .pdf
                "application/vnd.oasis.opendocument.text", // .odt
                "text/plain" // .txt
        });
        startActivityForResult(intent, REQUEST_CODE);

সেকেন্ডারি স্টোরেজ ভলিউমের ফাইলগুলিতে লিখুন

সেকেন্ডারি স্টোরেজ ভলিউমের মধ্যে এসডি কার্ড অন্তর্ভুক্ত। আপনি StorageVolume ক্লাস ব্যবহার করে একটি নির্দিষ্ট স্টোরেজ ভলিউম সম্পর্কে তথ্য অ্যাক্সেস করতে পারেন।

আপনার অ্যাপটি যে অ্যান্ড্রয়েড সংস্করণে চলে, তার উপর ভিত্তি করে লজিক অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড ১১-এ চালিত

এই পদ্ধতিটি ব্যবহার করুন:

  1. স্কোপড স্টোরেজ মডেল ব্যবহার করুন।
  2. টার্গেট অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) বা তার নিম্নতর সংস্করণ।
  3. WRITE_EXTERNAL_STORAGE অনুমতিটি ঘোষণা করুন।
  4. নিম্নলিখিত ধরণের অ্যাক্সেসগুলির মধ্যে একটি সম্পাদন করুন:
    • MediaStore API ব্যবহার করে ফাইল অ্যাক্সেস।
    • File বা fopen() এর মতো API ব্যবহার করে সরাসরি ফাইল পাথ অ্যাক্সেস করা যায়।

পুরানো সংস্করণগুলিতে চলছে

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

পুরোনো স্টোরেজ অবস্থান থেকে বিদ্যমান ফাইলগুলি স্থানান্তর করুন

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

ডেটা মাইগ্রেশনের জন্য লিগ্যাসি স্টোরেজ লোকেশনে অ্যাক্সেস বজায় রাখুন।

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

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

  2. স্কোপড স্টোরেজ থেকে অপ্ট-আউট করা অব্যাহত রাখুন, যাতে আপনার অ্যাপ অ্যান্ড্রয়েড ১০ ডিভাইসগুলিতে লেগ্যাসি স্টোরেজ লোকেশনে থাকা ফাইলগুলি অ্যাক্সেস করা চালিয়ে যেতে পারে।

আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১০-কে লক্ষ্য করে তৈরি করা হয়

বিভিন্ন অ্যান্ড্রয়েড সংস্করণে আপনার অ্যাপের আচরণ বজায় রাখা সহজ করতে স্কোপড স্টোরেজ থেকে অপ্ট আউট করুন

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

আপনার অ্যাপটি মাইগ্রেট করার জন্য প্রস্তুত হলে, নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:

  1. অ্যান্ড্রয়েড ১০ বা তার নিম্নতর সংস্করণকে লক্ষ্য করুন।
  2. স্কোপড স্টোরেজ থেকে অপ্ট আউট করুন, যাতে আপনার অ্যাপ মাইগ্রেট করার জন্য প্রয়োজনীয় ফাইলগুলোতে অ্যাক্সেস পায়।
  3. এমন কোড স্থাপন করুন যা File এপিআই ব্যবহার করে ফাইলগুলিকে তাদের বর্তমান অবস্থান /sdcard/ থেকে এমন একটি স্থানে স্থানান্তর করে যা স্কোপড স্টোরেজ দ্বারা অ্যাক্সেসযোগ্য:

    1. যেকোনো ব্যক্তিগত অ্যাপ ফাইল getExternalFilesDir() মেথড দ্বারা ফেরত আসা ডিরেক্টরিতে সরিয়ে নিন।
    2. শেয়ার করা যেকোনো নন-মিডিয়া ফাইল Downloads/ ডিরেক্টরির একটি অ্যাপ-নির্দিষ্ট সাবডিরেক্টরিতে সরিয়ে নিন।
  4. /sdcard/ ডিরেক্টরি থেকে আপনার অ্যাপের পুরোনো স্টোরেজ ডিরেক্টরিগুলো মুছে ফেলুন।

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

ব্যবহারকারীরা তাদের ডেটা স্থানান্তর করার পরে, আপনার অ্যাপে আরেকটি আপডেট প্রকাশ করুন, যেখানে আপনি অ্যান্ড্রয়েড ১১-কে লক্ষ্য করবেন।

অন্যান্য অ্যাপের সাথে কন্টেন্ট শেয়ার করুন

আপনার অ্যাপের ফাইলগুলো শুধুমাত্র অন্য একটি অ্যাপের সাথে শেয়ার করতে, একটি FileProvider ব্যবহার করুন । যেসব অ্যাপের নিজেদের মধ্যে ফাইল শেয়ার করার প্রয়োজন হয়, তাদের জন্য আমরা প্রতিটি অ্যাপের জন্য একটি করে কন্টেন্ট প্রোভাইডার ব্যবহার করার এবং কালেকশনে নতুন অ্যাপ যুক্ত হওয়ার সাথে সাথে ডেটা সিঙ্ক করার পরামর্শ দিই।

নন-মিডিয়া ফাইল ক্যাশে করুন

আপনার কোন পদ্ধতি ব্যবহার করা উচিত, তা নির্ভর করে আপনাকে কী ধরনের ফাইল ক্যাশ করতে হবে তার ওপর।

  • ছোট ফাইল অথবা সংবেদনশীল তথ্য সম্বলিত ফাইলের ক্ষেত্রে Context#getCacheDir() ব্যবহার করুন।
  • বড় ফাইল অথবা যেসব ফাইলে সংবেদনশীল তথ্য নেই , সেগুলোর জন্য Context#getExternalCacheDir() ব্যবহার করুন।

একটি ডিভাইসে নন-মিডিয়া ফাইল এক্সপোর্ট করুন

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

অ্যাপ-নির্দিষ্ট ফাইলগুলি পরিচালনা করুন

যদি আপনার অ্যাপ এমন ফাইল তৈরি করে যেগুলোতে অন্য অ্যাপের অ্যাক্সেস করার প্রয়োজন নেই বা করা উচিত নয়, তাহলে আপনি এই ফাইলগুলো অ্যাপ-নির্দিষ্ট স্টোরেজ লোকেশনে সংরক্ষণ করতে পারেন।

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

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

বাহ্যিক স্টোরেজ ডিরেক্টরি

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

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

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

স্কোপড স্টোরেজ থেকে সাময়িকভাবে অপ্ট-আউট করুন

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

আপনার পরীক্ষাগুলি থেকে বিরত থাকুন

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

যদি কোনো টেস্ট হোস্টের জন্য ফাইল আউটপুট করে—যেমন স্ক্রিনশট, ডিবাগিং ডেটা, কভারেজ ডেটা, বা পারফরম্যান্স মেট্রিক্স—তবে আপনি এই ফাইলগুলিকে গ্লোবাল ডিরেক্টরিতে লিখতে পারেন। এটি করার জন্য, am instrument কে আহ্বানকারী প্রাসঙ্গিক হারনেসে নিম্নলিখিত ফ্ল্যাগটি যোগ করুন:

-e no-isolated-storage 1

এই ফ্ল্যাগটি ইন্সট্রুমেন্টেড টেস্ট কেসের সমস্ত আচরণ এবং কল করা সমস্ত টেস্ট কোডকে প্রভাবিত করে। তাই, যখন আপনি এই ফ্ল্যাগটি ব্যবহার করেন, তখন আপনি স্কোপড স্টোরেজের সাথে আপনার অ্যাপের সামঞ্জস্যতা যাচাই করতে পারবেন না। টেস্ট আউটপুটের জন্য, এর পরিবর্তে শেল দ্বারা পঠনযোগ্য অ্যাপ-স্কোপড স্টোরেজে লেখা ভালো। এরপর আপনি সেই অ্যাপ-স্কোপড ডিরেক্টরিটি পুল করতে পারেন। কোন ডিরেক্টরি থেকে পুল করতে হবে তা নির্ধারণ করতে, getExternalMediaDirs() কল করুন।

আপনার প্রোডাকশন অ্যাপে অপ্ট আউট করুন

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

<manifest ... >
  <!-- This attribute is "false" by default on apps targeting
       Android 10. -->
  <application android:requestLegacyExternalStorage="true" ... >
    ...
  </application>
</manifest>

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

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

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

ব্লগ পোস্ট