ในหลายกรณี แอปของคุณจะสร้างไฟล์ที่แอปอื่นๆ ไม่จำเป็นต้องเข้าถึงหรือไม่ควรเข้าถึง ระบบจะจัดเตรียมตำแหน่งต่อไปนี้สำหรับจัดเก็บไฟล์เฉพาะแอปดังกล่าว
ไดเรกทอรีพื้นที่เก็บข้อมูลภายใน: ไดเรกทอรีเหล่านี้มีทั้งตำแหน่งเฉพาะสำหรับจัดเก็บไฟล์ถาวร และอีกตำแหน่งหนึ่งสำหรับจัดเก็บข้อมูลแคช ระบบจะป้องกันไม่ให้แอปอื่นๆ เข้าถึงตำแหน่งเหล่านี้ และใน 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()); }
หากต้องการอนุญาตให้แอปอื่นๆ เข้าถึงไฟล์ที่จัดเก็บไว้ในไดเรกทอรีนี้ภายในที่จัดเก็บข้อมูลภายใน ให้ใช้ 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
แหล่งข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับการบันทึกไฟล์ลงในพื้นที่เก็บข้อมูลของอุปกรณ์ได้ที่แหล่งข้อมูลต่อไปนี้