অনেক ক্ষেত্রে, আপনার অ্যাপ এমন ফাইল তৈরি করে যা অন্যান্য অ্যাপের অ্যাক্সেস করার প্রয়োজন হয় না বা অ্যাক্সেস করা উচিত নয়। এই ধরনের অ্যাপ-নির্দিষ্ট ফাইল সেভ করার জন্য সিস্টেম নিম্নলিখিত লোকেশন প্রদান করে:
ইন্টার্নাল স্টোরেজ ডিরেক্টরি: এই ডিরেক্টরির মধ্যে পারসিস্টেন্ট ফাইল সেভ করার জন্য নির্দিষ্ট লোকেশন এবং ক্যাশে ডেটা সেভ করার জন্য অন্য লোকেশন অন্তর্ভুক্ত থাকে। সিস্টেম অন্যান্য অ্যাপকে এইসব লোকেশন অ্যাক্সেস করতে দেয় না এবং Android 10 (API লেভেল ২৯) ও তার পরবর্তী ভার্সনে এইসব লোকেশন এনক্রিপ্ট করা থাকে। এইসব বৈশিষ্ট্যের কারণে এইসব লোকেশন সংবেদনশীল ডেটা স্টোর করার জন্য উপযুক্ত জায়গা, যা শুধুমাত্র আপনার অ্যাপ অ্যাক্সেস করতে পারে।
এক্সটার্নাল স্টোরেজ ডিরেক্টরি: এই ডিরেক্টরির মধ্যে পারসিস্টেন্ট ফাইল স্টোর করার জন্য একটি নির্দিষ্ট লোকেশন এবং ক্যাশে ডেটা স্টোর করার জন্য আরেকটি লোকেশন অন্তর্ভুক্ত থাকে। যদিও অন্য অ্যাপের পক্ষে এইসব ডিরেক্টরি অ্যাক্সেস করা সম্ভব যদি সেই অ্যাপের সঠিক অনুমতি থাকে, তবে এইসব ডিরেক্টরিতে স্টোর করা ফাইলগুলি শুধুমাত্র আপনার অ্যাপের ব্যবহারের জন্য। আপনি যদি বিশেষভাবে এমন ফাইল তৈরি করতে চান যা অন্যান্য অ্যাপ অ্যাক্সেস করতে পারবে, তাহলে আপনার অ্যাপের উচিত এইসব ফাইল এক্সটার্নাল স্টোরেজের শেয়ার করা স্টোরেজ অংশে স্টোর করা।
ব্যবহারকারী আপনার অ্যাপ আনইনস্টল করলে, অ্যাপ-নির্দিষ্ট স্টোরেজে সেভ করা ফাইল সরিয়ে দেওয়া হয়। এই আচরণের কারণে, ব্যবহারকারী আপনার অ্যাপ থেকে স্বাধীনভাবে কোনও কিছু সেভ করতে চাইলে, আপনার এই স্টোরেজ ব্যবহার করা উচিত নয়। উদাহরণস্বরূপ, আপনার অ্যাপ ব্যবহারকারীকে ফটো ক্যাপচার করার অনুমতি দিলে, ব্যবহারকারী আশা করবেন যে আপনার অ্যাপ আনইনস্টল করার পরেও তিনি সেইসব ফটো অ্যাক্সেস করতে পারবেন। তাই, এই ধরনের ফাইল উপযুক্ত মিডিয়া কালেকশনে সেভ করার জন্য, আপনার পরিবর্তে শেয়ার করা স্টোরেজ ব্যবহার করা উচিত।
অ্যাপ-নির্দিষ্ট ডিরেক্টরির মধ্যে কীভাবে ফাইল স্টোর এবং অ্যাক্সেস করতে হয় তা নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।
ইন্টার্নাল স্টোরেজ থেকে অ্যাক্সেস করুন
প্রতিটি অ্যাপের জন্য, সিস্টেম ইন্টার্নাল স্টোরেজের মধ্যে ডিরেক্টরি প্রদান করে যেখানে একটি অ্যাপ তার ফাইলগুলি সাজাতে পারে। একটি ডিরেক্টরি আপনার অ্যাপের পারসিস্টেন্ট ফাইলের জন্য ডিজাইন করা হয়েছে এবং অন্যটিতে আপনার অ্যাপের ক্যাশে করা ফাইল রয়েছে। এইসব ডিরেক্টরিতে ফাইল রিড ও রাইট করার জন্য আপনার অ্যাপের কোনও সিস্টেম অনুমতির প্রয়োজন নেই।
ইন্টার্নাল স্টোরেজে সেভ করা ফাইল অন্য অ্যাপ অ্যাক্সেস করতে পারবে না। এর ফলে, ইন্টার্নাল স্টোরেজ অ্যাপ ডেটার জন্য একটি ভালো জায়গা হয়ে ওঠে যা অন্যান্য অ্যাপ অ্যাক্সেস করতে পারে না।
তবে মনে রাখবেন, এই ডিরেক্টরিগুলি সাধারণত ছোট হয়। ইন্টার্নাল স্টোরেজে অ্যাপ-নির্দিষ্ট ফাইল লেখার আগে, আপনার অ্যাপকে ডিভাইসে ফাঁকা স্পেসের ব্যাপারে কোয়েরি করতে হবে।
পারসিস্টেন্ট ফাইল অ্যাক্সেস করুন
আপনার অ্যাপের সাধারণ, স্থায়ী ফাইলগুলি এমন একটি ডিরেক্টরিতে থাকে যা আপনি
কন্টেক্সট অবজেক্টের filesDir
প্রপার্টি ব্যবহার করে অ্যাক্সেস করতে পারবেন। এই ডিরেক্টরিতে ফাইল অ্যাক্সেস ও স্টোর করার জন্য
ফ্রেমওয়ার্কটি আপনাকে একাধিক পদ্ধতি প্রদান করে।
ফাইল অ্যাক্সেস ও স্টোর করা
ফাইল অ্যাক্সেস ও স্টোর করতে আপনি File API ব্যবহার করতে পারবেন।
আপনার অ্যাপের পারফর্ম্যান্স বজায় রাখতে সাহায্য করার জন্য, একই ফাইল একাধিকবার খুলবেন ও বন্ধ করবেন না।
নিচে দেওয়া কোড স্নিপেট থেকে File API কীভাবে ব্যবহার করতে হয় তা দেখানো হয়েছে:
Kotlin
val file = File(context.filesDir, filename)
জাভা
File file = new File(context.getFilesDir(), filename);
স্ট্রিম ব্যবহার করে ফাইল স্টোর করা
File API ব্যবহার করার বিকল্প হিসেবে, আপনি
openFileOutput()-কে কল করতে পারেন
যাতে FileOutputStream পাওয়া যায় যা
filesDir ডিরেক্টরির মধ্যে কোনও ফাইলে লেখে।
কোনও ফাইলে কীভাবে টেক্সট লিখতে হয় তা নিচের কোড স্নিপেট থেকে জানতে পারবেন:
Kotlin
val filename = "myfile" val fileContents = "Hello world!" context.openFileOutput(filename, Context.MODE_PRIVATE).use { it.write(fileContents.toByteArray()) }
জাভা
String filename = "myfile"; String fileContents = "Hello world!"; try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) { fos.write(fileContents.toByteArray()); }
ইন্টার্নাল স্টোরেজের মধ্যে এই ডিরেক্টরিতে সেভ করা
ফাইল অ্যাক্সেস করার জন্য অন্যান্য অ্যাপকে অনুমতি দিতে, FLAG_GRANT_READ_URI_PERMISSION
অ্যাট্রিবিউট সহ
FileProvider ব্যবহার করুন।
স্ট্রিম ব্যবহার করে ফাইল অ্যাক্সেস করা
স্ট্রিম হিসেবে ফাইল পড়তে, openFileInput() ব্যবহার করুন:
Kotlin
context.openFileInput(filename).bufferedReader().useLines { lines -> lines.fold("") { some, text -> "$some\n$text" } }
জাভা
FileInputStream fis = context.openFileInput(filename); InputStreamReader inputStreamReader = new InputStreamReader(fis, StandardCharsets.UTF_8); StringBuilder stringBuilder = new StringBuilder(); try (BufferedReader reader = new BufferedReader(inputStreamReader)) { String line = reader.readLine(); while (line != null) { stringBuilder.append(line).append('\n'); line = reader.readLine(); } } catch (IOException e) { // Error occurred when opening raw file for reading. } finally { String contents = stringBuilder.toString(); }
ফাইলের তালিকা দেখুন
আপনি filesDir
ডিরেক্টরির মধ্যে থাকা সব ফাইলের নাম সহ একটি অ্যারে পেতে পারেন
fileList() কল করে, যেমনটি
নিম্নলিখিত কোড স্নিপেটে দেখানো হয়েছে:
Kotlin
var files: Array<String> = context.fileList()
জাভা
Array<String> files = context.fileList();
নেস্টেড ডিরেক্টরি তৈরি করুন
এছাড়াও, আপনি Kotlin-ভিত্তিক কোডে getDir() কল করে অথবা Java-ভিত্তিক কোডে File কনস্ট্রাক্টরে রুট ডিরেক্টরি এবং একটি নতুন ডিরেক্টরির নাম পাস করে নেস্টেড ডিরেক্টরি তৈরি করতে বা একটি ইনার ডিরেক্টরি খুলতে পারেন:
Kotlin
context.getDir(dirName, Context.MODE_PRIVATE)
জাভা
File directory = context.getFilesDir(); File file = new File(directory, filename);
ক্যাশে ফাইল তৈরি করুন
আপনাকে যদি শুধুমাত্র সাময়িকভাবে সংবেদনশীল ডেটা স্টোর করতে হয়, তাহলে ডেটা সেভ করার জন্য ইন্টার্নাল স্টোরেজের মধ্যে অ্যাপের নির্দিষ্ট করা ক্যাশে ডিরেক্টরি ব্যবহার করা উচিত। সব অ্যাপ-নির্দিষ্ট স্টোরেজের ক্ষেত্রে যেমন হয়, ব্যবহারকারী আপনার অ্যাপ আনইনস্টল করলে এই ডিরেক্টরিতে স্টোর করা ফাইল মুছে যায়, যদিও এই ডিরেক্টরির ফাইল আরও আগে মুছে যেতে পারে।
-এ কল করুন।ক্যাশে করা ফাইল তৈরি করতে, File.createTempFile() কল করুন:
Kotlin
File.createTempFile(filename, null, context.cacheDir)
জাভা
File.createTempFile(filename, null, context.getCacheDir());
আপনার অ্যাপ এই ডিরেক্টরিতে একটি ফাইল অ্যাক্সেস করে,
cacheDir প্রপার্টি ব্যবহার করে
কন্টেক্সট অবজেক্ট এবং File API:
Kotlin
val cacheFile = File(context.cacheDir, filename)
জাভা
File cacheFile = new File(context.getCacheDir(), filename);
ক্যাশে ফাইল সরিয়ে দিন
Android কখনও কখনও নিজে থেকেই ক্যাশে ফাইল মুছে দিলেও, এই ফাইলগুলি পরিষ্কার করার জন্য সিস্টেমের উপর নির্ভর করা উচিত নয়। আপনার অ্যাপের ক্যাশে ফাইল সবসময় ইন্টার্নাল স্টোরেজে রাখতে হবে।
ইন্টার্নাল স্টোরেজের মধ্যে ক্যাশে ডিরেক্টরি থেকে কোনও ফাইল সরাতে, নিম্নলিখিত পদ্ধতিগুলির মধ্যে একটি ব্যবহার করুন:
Fileঅবজেক্টেdelete()পদ্ধতি যা ফাইলকে উপস্থাপন করে:Kotlin
cacheFile.delete()
জাভা
cacheFile.delete();
অ্যাপের কনটেক্সটের
deleteFile()পদ্ধতি, ফাইলের নাম পাস করা:Kotlin
context.deleteFile(cacheFileName)
জাভা
context.deleteFile(cacheFileName);
এক্সটার্নাল স্টোরেজ থেকে অ্যাক্সেস করুন
অ্যাপ-নির্দিষ্ট ফাইল স্টোর করার জন্য ইন্টার্নাল স্টোরেজে পর্যাপ্ত জায়গা না থাকলে, পরিবর্তে এক্সটার্নাল স্টোরেজ ব্যবহার করার কথা বিবেচনা করুন। সিস্টেম এক্সটার্নাল স্টোরেজের মধ্যে ডিরেক্টরি প্রদান করে যেখানে একটি অ্যাপ ফাইলগুলি সাজাতে পারে যা ব্যবহারকারীকে শুধুমাত্র আপনার অ্যাপের মধ্যে ভ্যালু প্রদান করে। একটি ডিরেক্টরি আপনার অ্যাপের পারসিস্টেন্ট ফাইলের জন্য ডিজাইন করা হয়েছে এবং অন্যটিতে আপনার অ্যাপের ক্যাশে করা ফাইল রয়েছে।
Android 4.4 (API লেভেল 19) বা তার পরবর্তী ভার্সনে, এক্সটার্নাল স্টোরেজের মধ্যে অ্যাপ-নির্দিষ্ট ডিরেক্টরি অ্যাক্সেস করার জন্য আপনার অ্যাপকে স্টোরেজ-সম্পর্কিত কোনও অনুমতির অনুরোধ করতে হবে না। আপনার অ্যাপ আনইনস্টল করা হলে, এইসব ডিরেক্টরিতে স্টোর করা ফাইল সরিয়ে দেওয়া হয়।
Android 9 (API লেভেল ২৮) বা তার আগের ভার্সনে চলে এমন ডিভাইসে, আপনার অ্যাপের কাছে উপযুক্ত স্টোরেজ সংক্রান্ত অনুমতি থাকলে, অন্যান্য অ্যাপের সাথে সম্পর্কিত অ্যাপ-নির্দিষ্ট ফাইল অ্যাক্সেস করতে পারবে। ব্যবহারকারীদের তাদের ফাইলের উপর আরও নিয়ন্ত্রণ দিতে এবং ফাইলের বিশৃঙ্খলা সীমিত করতে, Android 10 (API লেভেল ২৯) এবং তার পরবর্তী ভার্সনকে টার্গেট করা অ্যাপগুলিকে ডিফল্ট হিসেবে এক্সটার্নাল স্টোরেজ বা স্কোপড স্টোরেজে স্কোপড অ্যাক্সেস দেওয়া হয়। স্কোপড স্টোরেজ চালু করা থাকলে, অ্যাপগুলি অন্যান্য অ্যাপের অন্তর্গত অ্যাপ-নির্দিষ্ট ডিরেক্টরি অ্যাক্সেস করতে পারে না।
স্টোরেজ উপলভ্য আছে কিনা তা যাচাই করুন
এক্সটার্নাল স্টোরেজ এমন একটি ফিজিক্যাল ভলিউমে থাকে যা ব্যবহারকারী সরিয়ে দিতে পারেন, তাই এক্সটার্নাল স্টোরেজ থেকে অ্যাপ-নির্দিষ্ট ডেটা পড়া বা সেখানে অ্যাপ-নির্দিষ্ট ডেটা লেখার চেষ্টা করার আগে ভলিউমটি অ্যাক্সেস করা যাচ্ছে কিনা তা যাচাই করে নিন।
আপনি Environment.getExternalStorageState()-এ কল করে ভলিউমের স্ট্যাটাস সম্পর্কে কোয়েরি করতে পারবেন।
রিটার্ন করা স্টেট
MEDIA_MOUNTED হলে, আপনি এক্সটার্নাল স্টোরেজের মধ্যে অ্যাপ-নির্দিষ্ট ফাইল পড়তে ও লিখতে পারবেন। এটি
MEDIA_MOUNTED_READ_ONLY হলে,
আপনি শুধু এইসব ফাইল পড়তে পারবেন।
যেমন, স্টোরেজের উপলভ্যতা নির্ধারণ করার জন্য নিম্নলিখিত পদ্ধতিগুলি উপযোগী:
Kotlin
// Checks if a volume containing external storage is available // for read and write. fun isExternalStorageWritable(): Boolean { return Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED } // Checks if a volume containing external storage is available to at least read. fun isExternalStorageReadable(): Boolean { return Environment.getExternalStorageState() in setOf(Environment.MEDIA_MOUNTED, Environment.MEDIA_MOUNTED_READ_ONLY) }
জাভা
// Checks if a volume containing external storage is available // for read and write. private boolean isExternalStorageWritable() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } // Checks if a volume containing external storage is available to at least read. private boolean isExternalStorageReadable() { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED) || Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY); }
যেসব ডিভাইসে এক্সটার্নাল স্টোরেজ সরানো যায় না, সেগুলিতে এক্সটার্নাল স্টোরেজের উপলভ্যতা সংক্রান্ত লজিক পরীক্ষা করার জন্য ভার্চুয়াল ভলিউম চালু করতে নিম্নলিখিত কমান্ড ব্যবহার করুন:
adb shell sm set-virtual-disk true
একটি ফিজিক্যাল স্টোরেজ লোকেশন বেছে নিন
কখনও কখনও, এমন ডিভাইস যা তার ইন্টার্নাল মেমরির একটি পার্টিশনকে এক্সটার্নাল স্টোরেজ হিসেবে বরাদ্দ করে, সেটি এসডি কার্ড স্লটও প্রদান করে। এর অর্থ হল, ডিভাইসে একাধিক ফিজিক্যাল ভলিউম আছে যাতে এক্সটার্নাল স্টোরেজ থাকতে পারে, তাই আপনার অ্যাপ-নির্দিষ্ট স্টোরেজের জন্য কোনটি ব্যবহার করবেন তা আপনাকে বেছে নিতে হবে।
বিভিন্ন লোকেশন অ্যাক্সেস করতে, ContextCompat.getExternalFilesDirs() নম্বরে কল করুন।
কোড স্নিপেটে যেমন দেখানো হয়েছে, রিটার্ন করা অ্যারের প্রথম এলিমেন্টকে
প্রাথমিক এক্সটার্নাল স্টোরেজ ভলিউম হিসেবে বিবেচনা করা হয়। এই ভলিউমটি সম্পূর্ণ বা অনুপলভ্য না হওয়া পর্যন্ত
ব্যবহার করুন।
Kotlin
val externalStorageVolumes: Array<out File> = ContextCompat.getExternalFilesDirs(applicationContext, null) val primaryExternalStorage = externalStorageVolumes[0]
জাভা
File[] externalStorageVolumes = ContextCompat.getExternalFilesDirs(getApplicationContext(), null); File primaryExternalStorage = externalStorageVolumes[0];
পারসিস্টেন্ট ফাইল অ্যাক্সেস করুন
এক্সটার্নাল স্টোরেজ থেকে অ্যাপ-নির্দিষ্ট ফাইল অ্যাক্সেস করতে, getExternalFilesDir() কল করুন।
আপনার অ্যাপের পারফর্ম্যান্স বজায় রাখতে সাহায্য করার জন্য, একই ফাইল একাধিকবার খুলবেন ও বন্ধ করবেন না।
নিম্নলিখিত কোড স্নিপেট থেকে বোঝা যায় যে কীভাবে getExternalFilesDir() কল করতে হয়:
Kotlin
val appSpecificExternalDir = File(context.getExternalFilesDir(null), filename)
জাভা
File appSpecificExternalDir = new File(context.getExternalFilesDir(null), filename);
ক্যাশে ফাইল তৈরি করুন
এক্সটার্নাল স্টোরেজের মধ্যে ক্যাশেতে অ্যাপ-নির্দিষ্ট ফাইল যোগ করতে, externalCacheDir-এর রেফারেন্স পান:
Kotlin
val externalCacheFile = File(context.externalCacheDir, filename)
জাভা
File externalCacheFile = new File(context.getExternalCacheDir(), filename);
ক্যাশে ফাইল সরিয়ে দিন
এক্সটার্নাল ক্যাশে ডিরেক্টরি থেকে কোনও ফাইল সরাতে,
delete() পদ্ধতি ব্যবহার করুন, File অবজেক্টে যা
ফাইলকে দেখায়:
Kotlin
externalCacheFile.delete()
জাভা
externalCacheFile.delete();
মিডিয়া কন্টেন্ট
আপনার অ্যাপ যদি এমন মিডিয়া ফাইলের সাথে কাজ করে যা ব্যবহারকারীকে শুধুমাত্র আপনার অ্যাপের মধ্যে ভ্যালু প্রদান করে, তাহলে নিচের কোড স্নিপেটে দেখানো হিসাবে এক্সটার্নাল স্টোরেজের মধ্যে অ্যাপ-নির্দিষ্ট ডিরেক্টরিতে সেগুলি স্টোর করা সবচেয়ে ভালো:
Kotlin
fun getAppSpecificAlbumStorageDir(context: Context, albumName: String): File? { // Get the pictures directory that's inside the app-specific directory on // external storage. val file = File(context.getExternalFilesDir( Environment.DIRECTORY_PICTURES), albumName) if (!file?.mkdirs()) { Log.e(LOG_TAG, "Directory not created") } return file }
জাভা
@Nullable File getAppSpecificAlbumStorageDir(Context context, String albumName) { // Get the pictures directory that's inside the app-specific directory on // external storage. File file = new File(context.getExternalFilesDir( Environment.DIRECTORY_PICTURES), albumName); if (file == null || !file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }
API কনস্ট্যান্টের মাধ্যমে প্রদান করা ডিরেক্টরির নাম ব্যবহার করা গুরুত্বপূর্ণ, যেমন
DIRECTORY_PICTURES।
এই ডিরেক্টরির নামগুলি নিশ্চিত করে যে ফাইলগুলি সিস্টেম দ্বারা সঠিকভাবে ব্যবহার করা হয়েছে।
আগে থেকে নির্ধারিত সাব-ডিরেক্টরির
নামের মধ্যে কোনওটিই আপনার ফাইলের সাথে মানানসই না হলে, আপনি getExternalFilesDir()-এর মধ্যে null পাস করতে পারেন। এটি এক্সটার্নাল স্টোরেজের মধ্যে রুট
অ্যাপ-নির্দিষ্ট ডিরেক্টরি ফিরিয়ে দেয়।
খালি জায়গা সম্পর্কে কোয়েরি করুন
অনেক ব্যবহারকারীর ডিভাইসে বেশি স্টোরেজ স্পেস উপলভ্য থাকে না, তাই আপনার অ্যাপের স্পেস ব্যবহার করার সময় এই বিষয়টি মাথায় রাখা উচিত।
আপনি কতটা ডেটা স্টোর করছেন তা আগে থেকে জানলে, getAllocatableBytes() কল করে ডিভাইস আপনার অ্যাপকে কতটা স্পেস দিতে পারবে তা জানতে পারবেন।
getAllocatableBytes()-এর রিটার্ন ভ্যালু ডিভাইসে বর্তমানে খালি থাকা জায়গার পরিমাণের চেয়ে
বেশি হতে পারে। এর কারণ হল, সিস্টেম এমন ফাইল শনাক্ত করেছে
যা অন্যান্য অ্যাপের ক্যাশে ডিরেক্টরি থেকে সরানো যেতে পারে।
আপনার অ্যাপের ডেটা সেভ করার জন্য পর্যাপ্ত জায়গা থাকলে, allocateBytes() কল করুন।
অন্যথায়, আপনার অ্যাপ ব্যবহারকারীকে ডিভাইস থেকে কিছু ফাইল
মুছে দিতে অথবা ডিভাইস থেকে সব ক্যাশে
ফাইল মুছে দিতে অনুরোধ করতে পারে।
নিম্নলিখিত কোড স্নিপেট থেকে আপনার অ্যাপ কীভাবে ডিভাইসে খালি স্পেসের ব্যাপারে কোয়েরি করতে পারে তার উদাহরণ দেখানো হয়েছে:
Kotlin
// App needs 10 MB within internal storage. const val NUM_BYTES_NEEDED_FOR_MY_APP = 1024 * 1024 * 10L; val storageManager = applicationContext.getSystemService<StorageManager>()!! val appSpecificInternalDirUuid: UUID = storageManager.getUuidForPath(filesDir) val availableBytes: Long = storageManager.getAllocatableBytes(appSpecificInternalDirUuid) if (availableBytes >= NUM_BYTES_NEEDED_FOR_MY_APP) { storageManager.allocateBytes( appSpecificInternalDirUuid, NUM_BYTES_NEEDED_FOR_MY_APP) } else { val storageIntent = Intent().apply { // To request that the user remove all app cache files instead, set // "action" to ACTION_CLEAR_APP_CACHE. action = ACTION_MANAGE_STORAGE } }
জাভা
// App needs 10 MB within internal storage. private static final long NUM_BYTES_NEEDED_FOR_MY_APP = 1024 * 1024 * 10L; StorageManager storageManager = getApplicationContext().getSystemService(StorageManager.class); UUID appSpecificInternalDirUuid = storageManager.getUuidForPath(getFilesDir()); long availableBytes = storageManager.getAllocatableBytes(appSpecificInternalDirUuid); if (availableBytes >= NUM_BYTES_NEEDED_FOR_MY_APP) { storageManager.allocateBytes( appSpecificInternalDirUuid, NUM_BYTES_NEEDED_FOR_MY_APP); } else { // To request that the user remove all app cache files instead, set // "action" to ACTION_CLEAR_APP_CACHE. Intent storageIntent = new Intent(); storageIntent.setAction(ACTION_MANAGE_STORAGE); }
স্টোরেজ ম্যানেজমেন্ট অ্যাক্টিভিটি তৈরি করুন
আপনার অ্যাপ কাস্টম অ্যাক্টিভিটি ঘোষণা ও তৈরি করতে পারে যা লঞ্চ করা হলে,
ব্যবহারকারীকে তার ডিভাইসে আপনার অ্যাপের স্টোর করা ডেটা ম্যানেজ করার অনুমতি দেয়। আপনি
ম্যানিফেস্ট ফাইলে android:manageSpaceActivity
অ্যাট্রিবিউট ব্যবহার করে এই কাস্টম "স্পেস ম্যানেজ করুন" অ্যাক্টিভিটি
ঘোষণা করেন। আপনার অ্যাপ অ্যাক্টিভিটি এক্সপোর্ট না করলেও, ফাইল ম্যানেজার অ্যাপ এই অ্যাক্টিভিটি
ইনভোক করতে
পারে; অর্থাৎ, আপনার অ্যাক্টিভিটি
android:exported-কে
false হিসেবে সেট করলে।
ব্যবহারকারীকে কিছু ডিভাইস ফাইল সরাতে বলুন
ব্যবহারকারীকে ডিভাইসে ফাইল বেছে নিয়ে তা সরানোর অনুরোধ করতে, এমন একটি ইনটেন্ট ইনভোক করুন যাতে
ACTION_MANAGE_STORAGE
অ্যাকশন অন্তর্ভুক্ত থাকে। এই ইনটেন্ট ব্যবহারকারীকে একটি প্রম্পট দেখায়। প্রয়োজন হলে, এই প্রম্পট
ডিভাইসে উপলভ্য ফ্রি স্পেসের পরিমাণ দেখাতে পারে। এই
ব্যবহার করা সহজ তথ্য দেখাতে, নিম্নলিখিত গণনা থেকে প্রাপ্ত ফলাফল ব্যবহার করুন:
StorageStatsManager.getFreeBytes() / StorageStatsManager.getTotalBytes()
ব্যবহারকারীকে সব ক্যাশে ফাইল মুছে দিতে বলুন
বিকল্প হিসেবে, আপনি ব্যবহারকারীকে ডিভাইসের সব অ্যাপ থেকে ক্যাশে ফাইল মুছে ফেলার অনুরোধ করতে পারেন। এটি করতে, এমন একটি ইনটেন্ট ইনভোক করুন যাতে
ACTION_CLEAR_APP_CACHE
ইনটেন্ট অ্যাকশন অন্তর্ভুক্ত থাকে।
অতিরিক্ত রিসোর্স
ডিভাইসের স্টোরেজে ফাইল সেভ করার ব্যাপারে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্স পরামর্শ করুন।