অ্যান্ড্রয়েড এমন একটি ফাইল সিস্টেম ব্যবহার করে যা অন্যান্য প্ল্যাটফর্মের ডিস্ক-ভিত্তিক ফাইল সিস্টেমের অনুরূপ। এই সিস্টেমটি আপনার অ্যাপের ডেটা সংরক্ষণ করার জন্য বেশ কিছু বিকল্প প্রদান করে:
- অ্যাপ-নির্দিষ্ট স্টোরেজ: যে ফাইলগুলো শুধুমাত্র আপনার অ্যাপের ব্যবহারের জন্য, সেগুলো ইন্টারনাল স্টোরেজ ভলিউমের মধ্যে নির্দিষ্ট ডিরেক্টরিতে অথবা এক্সটারনাল স্টোরেজের মধ্যে ভিন্ন নির্দিষ্ট ডিরেক্টরিতে সংরক্ষণ করুন। সংবেদনশীল তথ্য সংরক্ষণের জন্য ইন্টারনাল স্টোরেজের ভেতরের ডিরেক্টরিগুলো ব্যবহার করুন, যেগুলোতে অন্য অ্যাপের অ্যাক্সেস থাকা উচিত নয়।
- শেয়ার্ড স্টোরেজ: যেসব ফাইল আপনার অ্যাপ অন্য অ্যাপের সাথে শেয়ার করতে চায়, যেমন মিডিয়া, ডকুমেন্ট এবং অন্যান্য ফাইল, সেগুলো এখানে সংরক্ষণ করুন।
- পছন্দসমূহ: ব্যক্তিগত, মৌলিক ডেটা কী-ভ্যালু জোড়ায় সংরক্ষণ করুন।
- ডাটাবেস: Room পার্সিস্টেন্স লাইব্রেরি ব্যবহার করে একটি ব্যক্তিগত ডাটাবেসে স্ট্রাকচার্ড ডেটা সংরক্ষণ করুন।
এই বিকল্পগুলোর বৈশিষ্ট্যগুলো নিম্নোক্ত সারণিতে সংক্ষেপে তুলে ধরা হলো:
| বিষয়বস্তুর ধরণ | প্রবেশ পদ্ধতি | অনুমতি প্রয়োজন | অন্যান্য অ্যাপ কি অ্যাক্সেস করতে পারে? | অ্যাপ আনইনস্টল করার সময় ফাইলগুলো মুছে গেছে? | |
|---|---|---|---|---|---|
| অ্যাপ-নির্দিষ্ট ফাইল | শুধুমাত্র আপনার অ্যাপের ব্যবহারের জন্য ফাইলগুলো | অভ্যন্তরীণ স্টোরেজ থেকে, getFilesDir() বা getCacheDir()বাহ্যিক সঞ্চয়স্থান থেকে, getExternalFilesDir() বা getExternalCacheDir() | অভ্যন্তরীণ সংরক্ষণের জন্য কখনই প্রয়োজন হয় না আপনার অ্যাপটি অ্যান্ড্রয়েড ৪.৪ (এপিআই লেভেল ১৯) বা তার উচ্চতর সংস্করণে চালিত ডিভাইসে ব্যবহার করা হলে বাহ্যিক স্টোরেজের প্রয়োজন নেই। | না | হ্যাঁ |
| মিডিয়া | শেয়ারযোগ্য মিডিয়া ফাইল (ছবি, অডিও ফাইল, ভিডিও) | MediaStore এপিআই | Android 11 (API লেভেল 30) বা তার উচ্চতর সংস্করণে অন্য অ্যাপের ফাইল অ্যাক্সেস করার সময় READ_EXTERNAL_STORAGEঅ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯)-এ অন্য অ্যাপের ফাইল অ্যাক্সেস করার সময় READ_EXTERNAL_STORAGE বা WRITE_EXTERNAL_STORAGE ব্যবহার করুন।অ্যান্ড্রয়েড ৯ (এপিআই লেভেল ২৮) বা তার নিম্ন সংস্করণের সকল ফাইলের জন্য অনুমতির প্রয়োজন হয়। | হ্যাঁ, তবে অন্য অ্যাপটির READ_EXTERNAL_STORAGE পারমিশন প্রয়োজন। | না |
| নথি এবং অন্যান্য ফাইল | অন্যান্য ধরণের শেয়ারযোগ্য বিষয়বস্তু, যার মধ্যে ডাউনলোড করা ফাইলও অন্তর্ভুক্ত। | স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক | কোনোটিই না | হ্যাঁ, সিস্টেম ফাইল পিকারের মাধ্যমে। | না |
| অ্যাপের পছন্দ | কী-ভ্যালু জোড়া | জেটপ্যাক প্রেফারেন্স লাইব্রেরি | কোনোটিই না | না | হ্যাঁ |
| ডাটাবেস | কাঠামোগত ডেটা | রুম পারসিস্টেন্স লাইব্রেরি | কোনোটিই না | না | হ্যাঁ |
আপনি যে সমাধানটি বেছে নেবেন তা আপনার নির্দিষ্ট চাহিদার উপর নির্ভর করে:
- আপনার ডেটার জন্য কতটা জায়গা প্রয়োজন?
- অভ্যন্তরীণ স্টোরেজে অ্যাপ-নির্দিষ্ট ডেটার জন্য সীমিত জায়গা রয়েছে। যদি আপনাকে প্রচুর পরিমাণে ডেটা সংরক্ষণ করতে হয়, তবে অন্য ধরনের স্টোরেজ ব্যবহার করুন।
- ডেটা অ্যাক্সেস কতটা নির্ভরযোগ্য হওয়া প্রয়োজন?
- আপনার অ্যাপের মৌলিক কার্যকারিতার জন্য যদি নির্দিষ্ট ডেটার প্রয়োজন হয়, যেমন অ্যাপটি চালু হওয়ার সময়, তাহলে সেই ডেটা ইন্টারনাল স্টোরেজ ডিরেক্টরি বা ডেটাবেসে রাখুন। এক্সটারনাল স্টোরেজে সংরক্ষিত অ্যাপ-নির্দিষ্ট ফাইলগুলো সবসময় অ্যাক্সেসযোগ্য হয় না, কারণ কিছু ডিভাইস ব্যবহারকারীদের এক্সটারনাল স্টোরেজের সাথে যুক্ত ফিজিক্যাল ডিভাইসটি সরিয়ে ফেলার সুযোগ দেয়।
- আপনাকে কী ধরনের ডেটা সংরক্ষণ করতে হবে?
- আপনার অ্যাপের জন্য প্রয়োজনীয় ডেটা থাকলে, অ্যাপ-নির্দিষ্ট স্টোরেজ ব্যবহার করুন। শেয়ারযোগ্য মিডিয়া কন্টেন্টের জন্য শেয়ার্ড স্টোরেজ ব্যবহার করুন, যাতে অন্যান্য অ্যাপও সেই কন্টেন্ট অ্যাক্সেস করতে পারে। স্ট্রাকচার্ড ডেটার জন্য, প্রেফারেন্সেস (কী-ভ্যালু ডেটার জন্য) অথবা ডেটাবেস (২টির বেশি কলামযুক্ত ডেটার জন্য) ব্যবহার করুন।
- ডেটা কি আপনার অ্যাপের জন্য গোপন থাকা উচিত?
- সংবেদনশীল ডেটা—যে ডেটা অন্য কোনো অ্যাপ থেকে অ্যাক্সেসযোগ্য হওয়া উচিত নয়—সংরক্ষণ করার সময় ইন্টারনাল স্টোরেজ, প্রেফারেন্সেস বা ডেটাবেস ব্যবহার করুন। ইন্টারনাল স্টোরেজের বাড়তি সুবিধা হলো, এর ডেটা ব্যবহারকারীদের কাছ থেকে গোপন থাকে।
সংরক্ষণের স্থানগুলির বিভাগ
অ্যান্ড্রয়েড দুই ধরনের ফিজিক্যাল স্টোরেজ লোকেশন প্রদান করে: ইন্টারনাল স্টোরেজ এবং এক্সটারনাল স্টোরেজ । বেশিরভাগ ডিভাইসে, ইন্টারনাল স্টোরেজ এক্সটারনাল স্টোরেজের চেয়ে ছোট হয়। তবে, ইন্টারনাল স্টোরেজ সব ডিভাইসেই সর্বদা উপলব্ধ থাকে, যা আপনার অ্যাপের নির্ভর করা ডেটা রাখার জন্য এটিকে একটি অধিক নির্ভরযোগ্য স্থান করে তোলে।
এসডি কার্ডের মতো অপসারণযোগ্য ভলিউমগুলো ফাইল সিস্টেমে এক্সটার্নাল স্টোরেজের অংশ হিসেবে প্রদর্শিত হয়। অ্যান্ড্রয়েড এই ডিভাইসগুলোকে /sdcard মতো একটি পাথ ব্যবহার করে উপস্থাপন করে।
অ্যাপগুলো ডিফল্টভাবে ইন্টারনাল স্টোরেজে সংরক্ষিত থাকে। তবে, যদি আপনার APK ফাইলের সাইজ খুব বড় হয়, তাহলে আপনি আপনার অ্যাপের ম্যানিফেস্ট ফাইলে একটি প্রেফারেন্স উল্লেখ করে অ্যাপটিকে এর পরিবর্তে এক্সটারনাল স্টোরেজে ইনস্টল করার নির্দেশ দিতে পারেন।
<manifest ... android:installLocation="preferExternal"> ... </manifest>
বাহ্যিক স্টোরেজে অনুমতি এবং প্রবেশাধিকার
অ্যান্ড্রয়েড নিম্নলিখিত স্টোরেজ-সম্পর্কিত অনুমতিগুলো নির্ধারণ করে: READ_EXTERNAL_STORAGE , WRITE_EXTERNAL_STORAGE , এবং MANAGE_EXTERNAL_STORAGE ।
অ্যান্ড্রয়েডের আগের সংস্করণগুলিতে, এক্সটার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ডিরেক্টরির বাইরের যেকোনো ফাইল অ্যাক্সেস করার জন্য অ্যাপগুলিকে READ_EXTERNAL_STORAGE পারমিশন ঘোষণা করতে হতো। এছাড়াও, অ্যাপ-নির্দিষ্ট ডিরেক্টরির বাইরের যেকোনো ফাইলে লেখার জন্য অ্যাপগুলিকে WRITE_EXTERNAL_STORAGE পারমিশন ঘোষণা করতে হতো।
অ্যান্ড্রয়েডের সাম্প্রতিক সংস্করণগুলো কোনো অ্যাপের একটি নির্দিষ্ট ফাইল অ্যাক্সেস করার এবং তাতে লেখার ক্ষমতা নির্ধারণ করার জন্য ফাইলের অবস্থানের চেয়ে এর উদ্দেশ্যের উপর বেশি নির্ভর করে। বিশেষ করে, যদি আপনার অ্যাপটি অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার উচ্চতর সংস্করণকে টার্গেট করে, তাহলে স্টোরেজে আপনার অ্যাপের অ্যাক্সেসের উপর WRITE_EXTERNAL_STORAGE পারমিশনের কোনো প্রভাব থাকে না। এই উদ্দেশ্য-ভিত্তিক স্টোরেজ মডেলটি ব্যবহারকারীর গোপনীয়তা উন্নত করে, কারণ অ্যাপগুলোকে ডিভাইসের ফাইল সিস্টেমের শুধুমাত্র সেইসব অংশেই অ্যাক্সেস দেওয়া হয় যা তারা প্রকৃতপক্ষে ব্যবহার করে।
অ্যান্ড্রয়েড ১১-এ MANAGE_EXTERNAL_STORAGE পারমিশনটি চালু করা হয়েছে, যা অ্যাপ-নির্দিষ্ট ডিরেক্টরি এবং MediaStore বাইরের ফাইলগুলিতে লেখার অ্যাক্সেস দেয়। এই পারমিশনটি সম্পর্কে আরও জানতে, এবং কেন বেশিরভাগ অ্যাপের তাদের প্রয়োজন মেটাতে এটি ঘোষণা করার দরকার হয় না, তা জানতে একটি স্টোরেজ ডিভাইসের সমস্ত ফাইল কীভাবে পরিচালনা করবেন সেই নির্দেশিকাটি দেখুন।
স্কোপড স্টোরেজ
ব্যবহারকারীদের তাদের ফাইলগুলির উপর আরও বেশি নিয়ন্ত্রণ দিতে এবং ফাইলের জঞ্জাল কমাতে, অ্যান্ড্রয়েড ১০ (এপিআই লেভেল ২৯) এবং তার উচ্চতর সংস্করণকে লক্ষ্য করে তৈরি অ্যাপগুলিকে ডিফল্টরূপে এক্সটার্নাল স্টোরেজে স্কোপড অ্যাক্সেস বা স্কোপড স্টোরেজ দেওয়া হয়। এই ধরনের অ্যাপগুলি এক্সটার্নাল স্টোরেজে শুধুমাত্র অ্যাপ-নির্দিষ্ট ডিরেক্টরি এবং অ্যাপটি দ্বারা তৈরি করা নির্দিষ্ট ধরণের মিডিয়া অ্যাক্সেস করতে পারে।
স্কোপড স্টোরেজ ব্যবহার করুন, যদি না আপনার অ্যাপের এমন কোনো ফাইলে অ্যাক্সেসের প্রয়োজন হয় যা অ্যাপ-নির্দিষ্ট ডিরেক্টরির বাইরে এবং MediaStore API-এর অ্যাক্সেসযোগ্য ডিরেক্টরির বাইরে সংরক্ষিত আছে। আপনি যদি অ্যাপ-নির্দিষ্ট ফাইলগুলো এক্সটার্নাল স্টোরেজে সংরক্ষণ করেন, তবে এই ফাইলগুলোকে এক্সটার্নাল স্টোরেজের একটি অ্যাপ-নির্দিষ্ট ডিরেক্টরিতে রেখে স্কোপড স্টোরেজ গ্রহণ করা সহজ করে তুলতে পারেন। এর ফলে, স্কোপড স্টোরেজ চালু থাকলেও আপনার অ্যাপ এই ফাইলগুলোতে অ্যাক্সেস বজায় রাখতে পারবে।
আপনার অ্যাপকে স্কোপড স্টোরেজের জন্য প্রস্তুত করতে, স্টোরেজ ব্যবহারের ক্ষেত্র এবং সেরা অনুশীলন নির্দেশিকাটি দেখুন। যদি আপনার অ্যাপের এমন কোনো ব্যবহারের ক্ষেত্র থাকে যা স্কোপড স্টোরেজের আওতাভুক্ত নয়, তাহলে একটি ফিচার রিকোয়েস্ট ফাইল করুন । আপনি সাময়িকভাবে স্কোপড স্টোরেজ ব্যবহার করা থেকে বিরত থাকতে পারেন।
ডিভাইসে ফাইলগুলি দেখুন
ডিভাইসে সংরক্ষিত ফাইলগুলো দেখতে, অ্যান্ড্রয়েড স্টুডিও-এর ডিভাইস ফাইল এক্সপ্লোরার ব্যবহার করুন।
অতিরিক্ত সম্পদ
ডেটা স্টোরেজ সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উৎসগুলো দেখুন।