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

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

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

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

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

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

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

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

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

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

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

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

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

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

ফটো থেকে অবস্থানের তথ্য অ্যাক্সেস করুন

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

অ্যান্ড্রয়েড ৯ বা তার আগের ভার্সনে চলছে

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

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

ইতিমধ্যেই বিদ্যমান একটি একক ছবি আমদানি করুন

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

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

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

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

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

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

সিস্টেম পিকার ব্যবহারকারীর কাছে যে ধরণের ছবি উপস্থাপন করে তা যদি আপনি ফিল্টার করতে চান, তাহলে আপনি setType() অথবা EXTRA_MIME_TYPES ব্যবহার করতে পারেন।

একটি মাত্র ছবি তুলুন

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

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

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

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

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

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

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

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

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

  1. "অ্যাপ অনুমতির অনুরোধ করুন" বিভাগে বর্ণিত সেরা অনুশীলনগুলি অনুসরণ করে, READ_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. সরাসরি ফাইল পাথ ব্যবহার করে ফাইলগুলি অ্যাক্সেস করুন।

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

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

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

অ্যান্ড্রয়েড ৯ বা তার আগের ভার্সনে চলছে

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

  1. "অ্যাপ অনুমতির অনুরোধ করুন" বিভাগে বর্ণিত সেরা অনুশীলনগুলি অনুসরণ করে, WRITE_EXTERNAL_STORAGE অনুমতির জন্য অনুরোধ করুন।
  2. সরাসরি ফাইল পাথ ব্যবহার করে ফাইলগুলি অ্যাক্সেস করুন।

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

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

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

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

সিস্টেম পিকার ব্যবহার করে ব্যবহারকারীকে খোলার জন্য একটি ফাইল বেছে নিতে বলার জন্য 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);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

যদি আপনার অ্যাপটি অ্যান্ড্রয়েড ১০-কে টার্গেট করে

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

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

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

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

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

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

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

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

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

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

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

  • ছোট ফাইল অথবা সংবেদনশীল তথ্য ধারণকারী ফাইল : Context#getCacheDir() ব্যবহার করুন।
  • বড় ফাইল অথবা যেসব ফাইলে সংবেদনশীল তথ্য নেই : Context#getExternalCacheDir() ব্যবহার করুন।

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

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

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

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

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

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

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

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

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

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

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

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

আপনার পরীক্ষা থেকে বেরিয়ে আসুন

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

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

-e no-isolated-storage 1

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

আপনার প্রোডাকশন অ্যাপ থেকে বেরিয়ে আসুন

যদি আপনার অ্যাপটি Android 10 (API লেভেল 29) বা তার নিচের ভার্সনের জন্য ব্যবহার করা হয়, তাহলে আপনি আপনার প্রোডাকশন অ্যাপে স্কোপড স্টোরেজ সাময়িকভাবে বন্ধ করে দিতে পারেন। তবে, যদি আপনি Android 10 টার্গেট করেন, তাহলে আপনার অ্যাপের ম্যানিফেস্ট ফাইলে requestLegacyExternalStorage এর মান true হিসেবে সেট করতে হবে:

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

স্কোপড স্টোরেজ ব্যবহার করার সময় Android 10 বা তার নিচের ভার্সনকে টার্গেট করে এমন একটি অ্যাপ কীভাবে আচরণ করে তা পরীক্ষা করার জন্য, আপনি requestLegacyExternalStorage এর মান false এ সেট করে আচরণটি বেছে নিতে পারেন। আপনি যদি Android 11 চালিত এমন একটি ডিভাইসে পরীক্ষা করেন, তাহলে স্কোপড স্টোরেজ সহ বা ছাড়াই আপনার অ্যাপের আচরণ পরীক্ষা করার জন্য আপনি অ্যাপের সামঞ্জস্যতা ফ্ল্যাগ ব্যবহার করতে পারেন।

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

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

ব্লগ পোস্ট