Android 10 : Can’t create directory in External Storage
ปี 2020 นี้ android 10 เริ่มมีผู้ใช้มากขึ้น และตัว android 10 เองก็มีการพัฒนาเพิ่มคุณสมบัติต่างๆรวมถึงความปลอดภัยด้วย ดังนั้นแอปปลิเคชันเดิมที่เคยทำงานได้บน android 4.x – android 9 อาจเจอปัญหาแอปฯทำงานผิดปกติบน Android 10 ได้
หนึ่งในปัญหาที่พบบ่อยเมื่อรันบน Android 10 นั่นคือ ไม่สามารถสร้างไฟล์ หรือไดเรกทอรี บน Internal Storage or External Storage (/storage/emulated/0)
เดิมเรามักจะสร้างไดเรกทอรีของแอปปลิเคชันด้วยการเรียกใช้
File file_path = Environment.getExternalStorageDirectory(); File directory = new File(file_path+”/myfolder/”); directory.mkdir(); |
ผลลัพธ์กลับไม่มีไดเรกทอรี /myfolder/ เกิดขึ้น ซึ่งแนวทางแก้ไขเบื้องต้นมีอยู่ 2 ทางด้วยกัน คือ
- เปลี่ยนมาสร้างไดเรกทอรีในส่วนของแอปปลิเคชันนั้นๆ ด้วยการเรียกใช้ getFilesDir() ดังนี้
String filepath = getFilesDir().toString(); File dir = new File (filepath+”/myfolder/”); |
ซึ่งผลลัพธ์ไดเรกทอรี /myfolder/ จะไปอยู่ภายใต้ /data/<package>/myfolder/ ของแต่ละแอปฯ ซึ่งจะถูกลบไปเมื่อแอปฯลบออกจากเครื่องด้วย
2. วิธีนี้เป็นแก้ไขเฉพาะ Android 10 เท่านั้น พอขึ้น Android R ก็จะใช้ไม่ได้อีก นั่นคือการแก้ไขไฟล์ AndroidManifest.xml เพิ่มบรรทัดนี้ดังนี้
<application … android:requestLegacyExternalStorage=”true” … > |
หลังจากเพิ่มบรรทัดนี้เข้าไปแล้วก็สามารถใช้งานได้ตามปกติ