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

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

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

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

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

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

অভ্যন্তরীণ সঞ্চয়স্থান থেকে অ্যাক্সেস

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

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

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

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

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

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

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

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

নিম্নলিখিত কোড স্নিপেটটি 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 API ব্যবহার করে এই ডিরেক্টরির একটি ফাইল অ্যাক্সেস করে:

কোটলিন

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

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

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

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

যেসব ডিভাইসে Android 9 (API লেভেল 28) বা তার নিচের ভার্সন চলে, সেখানে আপনার অ্যাপ অন্যান্য অ্যাপের সাথে সম্পর্কিত অ্যাপ-নির্দিষ্ট ফাইলগুলি অ্যাক্সেস করতে পারে, তবে আপনার অ্যাপের যথাযথ স্টোরেজ অনুমতি থাকলে। ব্যবহারকারীদের তাদের ফাইলগুলির উপর আরও নিয়ন্ত্রণ দিতে এবং ফাইলের বিশৃঙ্খলা সীমিত করতে, Android 10 (API লেভেল 29) এবং তার উচ্চতর ভার্সনগুলিকে লক্ষ্য করে এমন অ্যাপগুলিকে ডিফল্টরূপে বহিরাগত স্টোরেজ বা স্কোপড স্টোরেজে স্কোপড অ্যাক্সেস দেওয়া হয়। যখন স্কোপড স্টোরেজ সক্ষম করা থাকে, তখন অ্যাপগুলি অন্যান্য অ্যাপের সাথে সম্পর্কিত অ্যাপ-নির্দিষ্ট ডিরেক্টরিগুলি অ্যাক্সেস করতে পারে না।

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

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

আপনি 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

একটি বাস্তব স্টোরেজ অবস্থান নির্বাচন করুন

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

বিভিন্ন অবস্থান অ্যাক্সেস করতে, 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;
}

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

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

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

যদি আপনি আগে থেকেই জানেন যে আপনি কত ডেটা সঞ্চয় করছেন, তাহলে 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 ইন্টেন্ট অ্যাকশন অন্তর্ভুক্ত একটি ইন্টেন্ট চালু করুন।

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

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

ভিডিও