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 ทางด้วยกัน คือ

  1. เปลี่ยนมาสร้างไดเรกทอรีในส่วนของแอปปลิเคชันนั้นๆ ด้วยการเรียกใช้ 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”

>

หลังจากเพิ่มบรรทัดนี้เข้าไปแล้วก็สามารถใช้งานได้ตามปกติ

You may also like...