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