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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Kotlin

val file = File(context.filesDir, filename)

Java

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

จัดเก็บไฟล์โดยใช้สตรีม

คุณสามารถเรียกใช้ openFileOutput() เพื่อรับ FileOutputStream ที่เขียน ลงในไฟล์ภายในไดเรกทอรี filesDir แทนการใช้ File API

ข้อมูลโค้ดต่อไปนี้แสดงวิธีเขียนข้อความลงในไฟล์

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

หากต้องการอนุญาตให้แอปอื่นๆ เข้าถึงไฟล์ที่จัดเก็บไว้ใน ไดเรกทอรีนี้ภายในที่จัดเก็บข้อมูลภายใน ให้ใช้ 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

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

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

วิดีโอ