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

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

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

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

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

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

অভ্যন্তরীণ স্টোরেজ থেকে অ্যাক্সেস

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

অন্যান্য অ্যাপ ইন্টারনাল স্টোরেজে সংরক্ষিত ফাইল অ্যাক্সেস করতে পারে না। এই কারণে, ইন্টারনাল স্টোরেজ এমন অ্যাপ ডেটার জন্য একটি ভালো জায়গা, যা অন্য অ্যাপের অ্যাক্সেস করা উচিত নয়।

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

স্থায়ী ফাইল অ্যাক্সেস করুন

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

ফাইল অ্যাক্সেস করুন এবং সংরক্ষণ করুন

আপনি File এপিআই ব্যবহার করে ফাইল অ্যাক্সেস ও সংরক্ষণ করতে পারেন।

আপনার অ্যাপের পারফরম্যান্স বজায় রাখতে, একই ফাইল একাধিকবার খুলবেন না এবং বন্ধ করবেন না।

নিম্নলিখিত কোড স্নিপেটটি File API) ব্যবহারের পদ্ধতি প্রদর্শন করে:

কোটলিন

val file = File(context.filesDir, filename)

জাভা

File file = new File(context.getFilesDir(), filename);

স্ট্রিম ব্যবহার করে একটি ফাইল সংরক্ষণ করুন

File API ব্যবহারের বিকল্প হিসেবে, আপনি openFileOutput() কল করে একটি FileOutputStream পেতে পারেন, যা filesDir ডিরেক্টরির মধ্যে একটি ফাইলে লেখে।

নিচের কোড স্নিপেটটি দেখায় কিভাবে একটি ফাইলে কিছু টেক্সট লিখতে হয়:

কোটলিন

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() ব্যবহার করুন:

কোটলিন

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();
}

ফাইলগুলির তালিকা দেখুন

নিচের কোড স্নিপেটে দেখানো অনুযায়ী, fileList() কল করে আপনি filesDir ডিরেক্টরির অন্তর্গত সমস্ত ফাইলের নাম সম্বলিত একটি অ্যারে পেতে পারেন:

কোটলিন

var files: Array<String> = context.fileList()

জাভা

Array<String> files = context.fileList();

নেস্টেড ডিরেক্টরি তৈরি করুন

আপনি কোটলিন-ভিত্তিক কোডে getDir() কল করে অথবা জাভা-ভিত্তিক কোডে File কনস্ট্রাক্টরে রুট ডিরেক্টরি এবং একটি নতুন ডিরেক্টরির নাম পাস করে নেস্টেড ডিরেক্টরি তৈরি করতে বা একটি ভেতরের ডিরেক্টরি খুলতে পারেন:

কোটলিন

context.getDir(dirName, Context.MODE_PRIVATE)

জাভা

File directory = context.getFilesDir();
File file = new File(directory, filename);

ক্যাশে ফাইল তৈরি করুন

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

ক্যাশে ফাইল তৈরি করতে, File.createTempFile() কল করুন:

কোটলিন

File.createTempFile(filename, null, context.cacheDir)

জাভা

File.createTempFile(filename, null, context.getCacheDir());

আপনার অ্যাপ একটি কনটেক্সট অবজেক্টের cacheDir প্রপার্টি এবং File এপিআই ব্যবহার করে এই ডিরেক্টরিতে থাকা একটি ফাইল অ্যাক্সেস করে:

কোটলিন

val cacheFile = File(context.cacheDir, filename)

জাভা

File cacheFile = new File(context.getCacheDir(), filename);

ক্যাশে ফাইলগুলি সরান

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

ইন্টারনাল স্টোরেজের ক্যাশ ডিরেক্টরি থেকে কোনো ফাইল মুছে ফেলার জন্য, নিম্নলিখিত পদ্ধতিগুলোর মধ্যে একটি ব্যবহার করুন:

  • ফাইলটিকে প্রতিনিধিত্বকারী একটি File অবজেক্টের delete() মেথড:

    কোটলিন

    cacheFile.delete()

    জাভা

    cacheFile.delete();
  • অ্যাপের কনটেক্সটের deleteFile() মেথড, যেখানে ফাইলের নামটি পাস করতে হয়:

    কোটলিন

    context.deleteFile(cacheFileName)

    জাভা

    context.deleteFile(cacheFileName);

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

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

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

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

স্টোরেজ উপলব্ধ আছে কিনা যাচাই করুন।

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

আপনি Environment.getExternalStorageState() কল করে ভলিউমটির অবস্থা জানতে পারেন। যদি ফেরত আসা অবস্থাটি MEDIA_MOUNTED হয়, তাহলে আপনি এক্সটার্নাল স্টোরেজের মধ্যে অ্যাপ-নির্দিষ্ট ফাইলগুলো পড়তে ও লিখতে পারবেন। আর যদি এটি MEDIA_MOUNTED_READ_ONLY হয়, তবে আপনি কেবল এই ফাইলগুলো পড়তে পারবেন।

উদাহরণস্বরূপ, স্টোরেজের প্রাপ্যতা নির্ধারণের জন্য নিম্নলিখিত পদ্ধতিগুলো কার্যকর:

কোটলিন

// 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() কল করুন। কোড স্নিপেটে যেমন দেখানো হয়েছে, রিটার্ন করা অ্যারের প্রথম উপাদানটিকে প্রাথমিক এক্সটার্নাল স্টোরেজ ভলিউম হিসেবে বিবেচনা করা হয়। এই ভলিউমটি পূর্ণ বা অনুপলব্ধ না থাকলে, এটিই ব্যবহার করুন।

কোটলিন

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() কল করতে হয়:

কোটলিন

val appSpecificExternalDir = File(context.getExternalFilesDir(null), filename)

জাভা

File appSpecificExternalDir = new File(context.getExternalFilesDir(null), filename);

ক্যাশে ফাইল তৈরি করুন

এক্সটার্নাল স্টোরেজের ক্যাশে কোনো অ্যাপ-নির্দিষ্ট ফাইল যোগ করতে, externalCacheDir এর একটি রেফারেন্স নিন:

কোটলিন

val externalCacheFile = File(context.externalCacheDir, filename)

জাভা

File externalCacheFile = new File(context.getExternalCacheDir(), filename);

ক্যাশে ফাইলগুলি সরান

এক্সটার্নাল ক্যাশ ডিরেক্টরি থেকে কোনো ফাইল মুছে ফেলার জন্য, ফাইলটিকে প্রতিনিধিত্বকারী File অবজেক্টের উপর delete() মেথডটি ব্যবহার করুন:

কোটলিন

externalCacheFile.delete()

জাভা

externalCacheFile.delete();

মিডিয়া বিষয়বস্তু

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

কোটলিন

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;
}

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

খালি জায়গা অনুসন্ধান করুন

অনেক ব্যবহারকারীর ডিভাইসে বেশি স্টোরেজ স্পেস থাকে না, তাই আপনার অ্যাপটির উচিত ভেবেচিন্তে জায়গা ব্যবহার করা।

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

আপনার অ্যাপের ডেটা সংরক্ষণের জন্য পর্যাপ্ত জায়গা থাকলে allocateBytes() কল করুন। অন্যথায়, আপনার অ্যাপ ব্যবহারকারীকে ডিভাইস থেকে কিছু ফাইল বা সমস্ত ক্যাশ ফাইল মুছে ফেলার জন্য অনুরোধ করতে পারে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় যে কীভাবে আপনার অ্যাপ ডিভাইসের খালি জায়গা সম্পর্কে জানতে পারে:

কোটলিন

// 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 ইন্টেন্ট অ্যাকশনটি অন্তর্ভুক্ত করে এমন একটি ইন্টেন্ট চালু করুন।

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

ডিভাইসের স্টোরেজে ফাইল সংরক্ষণ সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত উৎসগুলো দেখুন।

ভিডিও