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

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

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

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

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

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

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

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

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

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

অবিরাম ফাইল অ্যাক্সেস করুন

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

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

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

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

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

কোটলিন

val file = File(context.filesDir, filename)

জাভা

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

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

File এপিআই ব্যবহার করার বিকল্প হিসাবে, আপনি একটি FileOutputStream পেতে openFileOutput() কল করতে পারেন যা 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);
    

এক্সটার্নাল স্টোরেজ থেকে অ্যাক্সেস

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

অ্যান্ড্রয়েড 4.4 (API লেভেল 19) বা উচ্চতর, আপনার অ্যাপকে বাহ্যিক স্টোরেজের মধ্যে অ্যাপ-নির্দিষ্ট ডিরেক্টরি অ্যাক্সেস করার জন্য স্টোরেজ-সম্পর্কিত অনুমতির অনুরোধ করার প্রয়োজন নেই। আপনার অ্যাপ আনইনস্টল হয়ে গেলে এই ডিরেক্টরিগুলিতে সঞ্চিত ফাইলগুলি সরানো হয়৷

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 । এই ডিরেক্টরির নামগুলি নিশ্চিত করে যে ফাইলগুলি সিস্টেম দ্বারা সঠিকভাবে চিকিত্সা করা হয়েছে। যদি পূর্ব-নির্ধারিত সাব-ডিরেক্টরি নামগুলির কোনওটিই আপনার ফাইলগুলির সাথে মানানসই না হয় তবে আপনি পরিবর্তে 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 to false .

ব্যবহারকারীকে কিছু ডিভাইস ফাইল সরাতে বলুন

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

StorageStatsManager.getFreeBytes() / StorageStatsManager.getTotalBytes()

সমস্ত ক্যাশে ফাইল সরাতে ব্যবহারকারীকে বলুন

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

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

ডিভাইসের সঞ্চয়স্থানে ফাইল সংরক্ষণ করার বিষয়ে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন৷

ভিডিও