เข้าถึงไฟล์เฉพาะแอป

ในหลายกรณี แอปของคุณจะสร้างไฟล์ที่แอปอื่นๆ ไม่จำเป็นต้องเข้าถึงหรือไม่ควรเข้าถึง ระบบมีตำแหน่งต่อไปนี้สำหรับจัดเก็บไฟล์เฉพาะแอปดังกล่าว

  • ไดเรกทอรีที่จัดเก็บข้อมูลภายใน: ไดเรกทอรีเหล่านี้มีทั้งตำแหน่งเฉพาะสำหรับจัดเก็บไฟล์ถาวร และตำแหน่งอื่นสำหรับจัดเก็บข้อมูลแคช ระบบจะป้องกันไม่ให้แอปอื่นๆ เข้าถึงตำแหน่งเหล่านี้ และตำแหน่งเหล่านี้จะได้รับการเข้ารหัสใน Android 10 (API ระดับ 29) ขึ้นไป ลักษณะเหล่านี้ทำให้ตำแหน่งเหล่านี้เหมาะสําหรับจัดเก็บข้อมูลที่ละเอียดอ่อนซึ่งมีเพียงแอปของคุณเท่านั้นที่เข้าถึงได้

  • ไดเรกทอรีพื้นที่เก็บข้อมูลภายนอก: ไดเรกทอรีเหล่านี้มีทั้งตำแหน่งเฉพาะสำหรับจัดเก็บไฟล์ถาวร และตำแหน่งอื่นสำหรับจัดเก็บข้อมูลแคช แม้ว่าแอปอื่นจะเข้าถึงไดเรกทอรีเหล่านี้ได้หากมีสิทธิ์ที่เหมาะสม แต่ไฟล์ที่จัดเก็บในไดเรกทอรีเหล่านี้มีไว้สำหรับแอปของคุณเท่านั้น หากคุณตั้งใจจะสร้างไฟล์ที่แอปอื่นๆ ควรเข้าถึงได้โดยเฉพาะ แอปของคุณควรจัดเก็บไฟล์เหล่านี้ในส่วนพื้นที่เก็บข้อมูลที่ใช้ร่วมกันของพื้นที่เก็บข้อมูลภายนอกแทน

เมื่อผู้ใช้ถอนการติดตั้งแอป ระบบจะนำไฟล์ที่บันทึกไว้ในพื้นที่เก็บข้อมูลเฉพาะแอปออก ด้วยเหตุนี้ คุณจึงไม่ควรใช้พื้นที่เก็บข้อมูลนี้เพื่อบันทึกข้อมูลใดๆ ที่ผู้ใช้คาดหวังว่าจะคงอยู่โดยไม่ขึ้นอยู่กับแอปของคุณ เช่น หากแอปอนุญาตให้ผู้ใช้จับภาพ ผู้ใช้จะคาดหวังว่าจะเข้าถึงรูปภาพเหล่านั้นได้แม้ว่าจะถอนการติดตั้งแอปแล้วก็ตาม คุณจึงควรใช้พื้นที่เก็บข้อมูลที่ใช้ร่วมกันเพื่อบันทึกไฟล์ประเภทเหล่านั้นลงในคอลเล็กชันสื่อที่เหมาะสมแทน

ส่วนต่อไปนี้อธิบายวิธีจัดเก็บและเข้าถึงไฟล์ภายในไดเรกทอรีเฉพาะแอป

เข้าถึงจากที่จัดเก็บข้อมูลภายใน

สําหรับแต่ละแอป ระบบจะมีไดเรกทอรีภายในที่จัดเก็บข้อมูลภายในซึ่งแอปสามารถจัดระเบียบไฟล์ได้ ไดเรกทอรีหนึ่งออกแบบมาสำหรับไฟล์ถาวรของแอป และอีกไดเรกทอรีหนึ่งมีไฟล์แคชของแอป แอปของคุณไม่จําเป็นต้องมีสิทธิ์ของระบบในการอ่านและเขียนไฟล์ในไดเรกทอรีเหล่านี้

แอปอื่นๆ จะเข้าถึงไฟล์ที่จัดเก็บไว้ในที่จัดเก็บข้อมูลภายในไม่ได้ ซึ่งทำให้พื้นที่เก็บข้อมูลภายในเป็นพื้นที่ที่ดีสำหรับข้อมูลแอปที่ไม่ควรให้แอปอื่นๆ เข้าถึง

อย่างไรก็ตาม โปรดทราบว่าไดเรกทอรีเหล่านี้มักจะมีขนาดเล็ก ก่อนเขียนไฟล์เฉพาะแอปลงในพื้นที่เก็บข้อมูลภายใน แอปของคุณควรค้นหาพื้นที่ว่างในอุปกรณ์

เข้าถึงไฟล์ถาวร

ไฟล์ถาวรธรรมดาของแอปจะอยู่ในไดเรกทอรีที่คุณเข้าถึงได้โดยใช้พร็อพเพอร์ตี้ filesDir ของออบเจ็กต์บริบท เฟรมเวิร์กนี้มีวิธีการหลายวิธีเพื่อช่วยให้คุณเข้าถึงและจัดเก็บไฟล์ในไดเรกทอรีนี้ได้

เข้าถึงและจัดเก็บไฟล์

คุณสามารถใช้ File API เพื่อเข้าถึงและจัดเก็บไฟล์

อย่าเปิดและปิดไฟล์เดียวกันหลายครั้งเพื่อช่วยรักษาประสิทธิภาพของแอป

ข้อมูลโค้ดต่อไปนี้แสดงวิธีใช้ File API

Kotlin

val file = File(context.filesDir, filename)

Java

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

Java

String filename = "myfile";
String fileContents = "Hello world!";
try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) {
    fos.write(fileContents.toByteArray());
}

หากต้องการอนุญาตให้แอปอื่นๆ เข้าถึงไฟล์ที่จัดเก็บไว้ในไดเรกทอรีนี้ภายในที่จัดเก็บข้อมูลภายใน ให้ใช้ FileProvider ที่มีแอตทริบิวต์ FLAG_GRANT_READ_URI_PERMISSION

เข้าถึงไฟล์โดยใช้สตรีม

หากต้องการอ่านไฟล์เป็นสตรีม ให้ใช้ openFileInput() ดังนี้

Kotlin

context.openFileInput(filename).bufferedReader().useLines { lines ->
    lines.fold("") { some, text ->
        "$some\n$text"
    }
}

Java

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

Java

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

สร้างไดเรกทอรีที่ซ้อนกัน

คุณยังสร้างไดเรกทอรีที่ฝังอยู่หรือเปิดไดเรกทอรีภายในได้โดยเรียกใช้ getDir() ในโค้ดที่ใช้ Kotlin หรือส่งไดเรกทอรีรูทและชื่อไดเรกทอรีใหม่ไปยังคอนสตรัคเตอร์ File ในโค้ดที่ใช้ Java ดังนี้

Kotlin

context.getDir(dirName, Context.MODE_PRIVATE)

Java

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

สร้างไฟล์แคช

หากต้องการจัดเก็บข้อมูลที่ละเอียดอ่อนไว้ชั่วคราวเท่านั้น คุณควรใช้ไดเรกทอรีแคชที่กําหนดของแอปภายในที่จัดเก็บข้อมูลภายในเพื่อบันทึกข้อมูล ระบบจะนำไฟล์ที่จัดเก็บไว้ในไดเรกทอรีนี้ออกเมื่อผู้ใช้ถอนการติดตั้งแอปของคุณ เช่นเดียวกับพื้นที่เก็บข้อมูลเฉพาะแอปทั้งหมด แม้ว่าระบบอาจนำไฟล์ในไดเรกทอรีนี้ออกเร็วกว่านั้น

หากต้องการสร้างไฟล์ที่แคชไว้ ให้เรียกใช้ File.createTempFile() ดังนี้

Kotlin

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

Java

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

แอปของคุณเข้าถึงไฟล์ในไดเรกทอรีนี้โดยใช้พร็อพเพอร์ตี้ cacheDir ของออบเจ็กต์คอนテキストและ File API

Kotlin

val cacheFile = File(context.cacheDir, filename)

Java

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

นำไฟล์แคชออก

แม้ว่าบางครั้ง Android จะลบไฟล์แคชด้วยตนเอง แต่คุณก็ไม่ควรไว้วางใจให้ระบบล้างไฟล์เหล่านี้ให้คุณ คุณควรดูแลไฟล์แคชของแอปไว้ในที่จัดเก็บข้อมูลภายในเสมอ

หากต้องการนำไฟล์ออกจากไดเรกทอรีแคชภายในที่เก็บข้อมูลภายใน ให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

  • เมธอด delete() บนออบเจ็กต์ File ที่แสดงไฟล์

    Kotlin

    cacheFile.delete()
    

    Java

    cacheFile.delete();
    
  • วิธีการ deleteFile() ของบริบทของแอป โดยส่งชื่อไฟล์

    Kotlin

    context.deleteFile(cacheFileName)
    

    Java

    context.deleteFile(cacheFileName);
    

การเข้าถึงจากที่จัดเก็บข้อมูลภายนอก

หากพื้นที่เก็บข้อมูลภายในมีพื้นที่ไม่เพียงพอที่จะจัดเก็บไฟล์เฉพาะแอป ให้พิจารณาใช้พื้นที่เก็บข้อมูลภายนอกแทน ระบบจะมีไดเรกทอรีภายในที่จัดเก็บข้อมูลภายนอก ซึ่งแอปจะจัดระเบียบไฟล์ที่เป็นประโยชน์ต่อผู้ใช้ได้ภายในแอปเท่านั้น ไดเรกทอรีหนึ่งออกแบบมาสำหรับไฟล์ถาวรของแอป และอีกไดเรกทอรีหนึ่งมีไฟล์ที่แอปแคชไว้

ใน Android 4.4 (API ระดับ 19) ขึ้นไป แอปของคุณไม่จําเป็นต้องขอสิทธิ์ใดๆ ที่เกี่ยวข้องกับพื้นที่เก็บข้อมูลเพื่อเข้าถึงไดเรกทอรีเฉพาะแอปภายในพื้นที่เก็บข้อมูลภายนอก ระบบจะนำไฟล์ที่จัดเก็บไว้ในไดเรกทอรีเหล่านี้ออกเมื่อคุณถอนการติดตั้งแอป

ในอุปกรณ์ที่ใช้ Android 9 (API ระดับ 28) หรือต่ำกว่า แอปของคุณจะเข้าถึงไฟล์เฉพาะแอปที่เป็นของแอปอื่นๆ ได้ ในกรณีที่แอปมีสิทธิ์เข้าถึงพื้นที่เก็บข้อมูลที่เหมาะสม แอปที่กำหนดเป้าหมายเป็น Android 10 (API ระดับ 29) ขึ้นไปจะได้รับสิทธิ์เข้าถึงที่กําหนดขอบเขตในที่จัดเก็บข้อมูลภายนอกหรือพื้นที่เก็บข้อมูลที่กําหนดขอบเขตโดยค่าเริ่มต้น เพื่อให้ผู้ใช้ควบคุมไฟล์ได้มากขึ้นและจำกัดไฟล์ที่รก เมื่อเปิดใช้พื้นที่เก็บข้อมูลแบบจำกัดขอบเขต แอปจะเข้าถึงไดเรกทอรีเฉพาะแอปซึ่งเป็นของแอปอื่นไม่ได้

ตรวจสอบว่ามีพื้นที่เก็บข้อมูลเพียงพอ

เนื่องจากพื้นที่เก็บข้อมูลภายนอกอยู่ในวอลุ่มจริงที่ผู้ใช้อาจนำออกได้ ให้ตรวจสอบว่าเข้าถึงวอลุ่มได้ก่อนที่จะพยายามอ่านข้อมูลจากหรือเขียนข้อมูลเฉพาะแอปลงในพื้นที่เก็บข้อมูลภายนอก

คุณสามารถค้นหาสถานะของระดับเสียงได้โดยเรียกใช้ 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)
}

Java

// 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() ดังที่แสดงในข้อมูลโค้ด องค์ประกอบแรกในอาร์เรย์ที่แสดงผลจะถือว่าเป็นวอลุ่มพื้นที่เก็บข้อมูลภายนอกหลัก ใช้วอลุ่มนี้ เว้นแต่ว่าวอลุ่มจะเต็มหรือใช้งานไม่ได้

Kotlin

val externalStorageVolumes: Array<out File> =
        ContextCompat.getExternalFilesDirs(applicationContext, null)
val primaryExternalStorage = externalStorageVolumes[0]

Java

File[] externalStorageVolumes =
        ContextCompat.getExternalFilesDirs(getApplicationContext(), null);
File primaryExternalStorage = externalStorageVolumes[0];

เข้าถึงไฟล์ถาวร

หากต้องการเข้าถึงไฟล์เฉพาะแอปจากที่จัดเก็บข้อมูลภายนอก ให้เรียกใช้ getExternalFilesDir()

อย่าเปิดและปิดไฟล์เดียวกันหลายครั้งเพื่อช่วยรักษาประสิทธิภาพของแอป

ข้อมูลโค้ดต่อไปนี้แสดงวิธีเรียก getExternalFilesDir()

Kotlin

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

Java

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

สร้างไฟล์แคช

หากต้องการเพิ่มไฟล์เฉพาะแอปลงในแคชภายในพื้นที่เก็บข้อมูลภายนอก ให้รับการอ้างอิงถึง externalCacheDir ดังนี้

Kotlin

val externalCacheFile = File(context.externalCacheDir, filename)

Java

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

นำไฟล์แคชออก

หากต้องการนำไฟล์ออกจากไดเรกทอรีแคชภายนอก ให้ใช้เมธอด delete() บนออบเจ็กต์ File ที่แสดงไฟล์

Kotlin

externalCacheFile.delete()

Java

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
}

Java

@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() หรือแอปจะขอให้ผู้ใช้นำไฟล์บางไฟล์ออกจากอุปกรณ์หรือนำไฟล์แคชทั้งหมดออกจากอุปกรณ์ก็ได้

ข้อมูลโค้ดต่อไปนี้แสดงตัวอย่างวิธีที่แอปสามารถค้นหาพื้นที่ว่างในอุปกรณ์

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

Java

// 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 ในไฟล์ Manifest แอปจัดการไฟล์สามารถเรียกใช้กิจกรรมนี้ได้แม้ว่าแอปของคุณจะไม่ส่งออกกิจกรรมก็ตาม กล่าวคือ เมื่อกิจกรรมตั้งค่า android:exported เป็น false

ขอให้ผู้ใช้นำไฟล์บางรายการในอุปกรณ์ออก

หากต้องการขอให้ผู้ใช้เลือกไฟล์ในอุปกรณ์ที่จะนำออก ให้เรียกใช้ Intent ที่มีการดำเนินการ ACTION_MANAGE_STORAGE Intent นี้จะแสดงข้อความแจ้งต่อผู้ใช้ โดยพรอมต์นี้จะแสดงปริมาณพื้นที่ว่างในอุปกรณ์ได้หากต้องการ หากต้องการแสดงข้อมูลนี้ที่เข้าใจง่ายสำหรับผู้ใช้ ให้ใช้ผลลัพธ์ของการคำนวณต่อไปนี้

StorageStatsManager.getFreeBytes() / StorageStatsManager.getTotalBytes()

ขอให้ผู้ใช้นำไฟล์แคชทั้งหมดออก

หรือจะขอให้ผู้ใช้ล้างไฟล์แคชจากแอปทั้งหมดในอุปกรณ์ก็ได้ โดยเรียกใช้ Intent ที่มีการดำเนินการของ Intent ACTION_CLEAR_APP_CACHE

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกไฟล์ลงในพื้นที่เก็บข้อมูลของอุปกรณ์ได้ที่แหล่งข้อมูลต่อไปนี้

วิดีโอ