Penyimpanan eksternal pada perangkat seluler adalah media data yang dapat dilepas, yang dapat diakses oleh aplikasi mana pun dengan izin yang sesuai. Menurut Android Open Source Project, 2026, mulai Android 10, Google memperkenalkan Scoped Storage — model yang membatasi akses langsung ke sistem file dan memerlukan penggunaan MediaStore API untuk bekerja dengan file media bersama. Pendekatan ini meningkatkan keamanan data pengguna dan mencegah kebocoran informasi antar aplikasi.
Poin Penting
READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE wajib untuk Android 9 dan yang lebih rendahPenyimpanan eksternal — adalah area memori yang tidak termasuk dalam sandbox aplikasi yang dilindungi dan dapat diakses oleh program lain. Di Android, istilah ini biasanya merujuk pada kartu SD, tetapi penyimpanan eksternal juga mencakup drive USB yang terhubung melalui adaptor OTG dan disk cloud yang terintegrasi di tingkat sistem file.
Di Android, penyimpanan eksternal disajikan dalam dua mode utama: portabel dan dapat diadopsi (adoptable). Saat memformat kartu SD sebagai penyimpanan portabel, kartu tetap dapat dilepas dan diformat dalam FAT32 atau exFAT. Dalam mode adoptable storage, kartu diformat dalam ext4 dan dienkripsi dengan AES-128, setelah itu sistem melihatnya sebagai perluasan memori internal. Mode adoptable tersedia mulai Android 6.0 Marshmallow, tetapi produsen perangkat sering menonaktifkan opsi ini di firmware mereka. Menurut statistik Google Play Console, hanya sekitar 12% perangkat Android yang mendukung adoptable storage, oleh karena itu tidak disarankan untuk mengandalkan perluasan memori internal melalui kartu SD sebagai satu-satunya opsi.
Di iOS tidak ada kartu SD tradisional. Apple menggunakan arsitektur tertutup di mana semua penyimpanan dibangun di atas memori flash internal dan iCloud. Drive eksternal didukung melalui port Lightning atau USB-C, tetapi akses ke drive tersebut dibatasi pada manajer file sistem Files dan aplikasi yang terintegrasi dengan Document Picker. Pengguna sendiri yang memutuskan file mana yang akan dibuka dari sumber eksternal — aplikasi tidak dapat memindai drive yang terhubung tanpa persetujuan eksplisit.
Pemilihan media eksternal tergantung pada persyaratan kecepatan, kapasitas, dan portabilitas. Berbagai jenis media memiliki karakteristik kecepatan, sistem file, dan skenario penggunaan yang berbeda dalam aplikasi seluler.
| Jenis media | Kapasitas maks. | Kecepatan baca | Sistem file |
|---|---|---|---|
| SD UHS-I | 2 TB | hingga 104 MB/dtk | exFAT / FAT32 |
| SD UHS-II | 2 TB | hingga 312 MB/dtk | exFAT / FAT32 |
| USB 3.0 OTG | 2 TB | hingga 400 MB/dtk | exFAT / NTFS / FAT32 |
| USB-C SSD | 4 TB | hingga 1000 MB/dtk | exFAT / APFS / NTFS |
Kartu SD diklasifikasikan berdasarkan kecepatan tulis: Class 10 (10 MB/dtk), U1 (10 MB/dtk), U3 (30 MB/dtk), V30 (30 MB/dtk) dan V90 (90 MB/dtk). Untuk merekam video 4K diperlukan kartu minimal U3 atau V30. Untuk aplikasi seluler yang bekerja dengan file media besar (pemrosesan foto, editing video), disarankan menggunakan kartu kelas U3 dan lebih tinggi. Kecepatan kartu secara langsung mempengaruhi kinerja aplikasi: merekam video 4K pada kartu Class 10 dapat menyebabkan hilangnya bingkai karena bandwidth yang tidak mencukupi. Saat memilih kartu SD untuk aplikasi, perhatikan tidak hanya kelas kecepatan, tetapi juga peringkat Application Performance Class: A1 dan A2 menunjukkan kinerja baca dan tulis acak minimum yang penting untuk pengoperasian database dan cache aplikasi.
USB-OTG (On-The-Go) memungkinkan menghubungkan drive USB eksternal ke perangkat seluler melalui adaptor. Android mendukung OTG mulai versi 3.1, tetapi untuk memasang drive diperlukan kernel dengan dukungan sistem file. FAT32 dan exFAT didukung secara default, NTFS — hanya pada perangkat dengan kernel kustom atau melalui pustaka Paragon. Di iOS, dukungan untuk drive USB muncul di iOS 13 bersama dengan aplikasi Files. Untuk bekerja dengan drive, aplikasi harus menggunakan UIDocumentPickerViewController, yang membuka akses hanya ke file yang dipilih oleh pengguna — iOS tidak menyediakan akses penuh ke sistem file drive.
Layanan cloud — iCloud, Google Drive, Dropbox — dapat diintegrasikan ke dalam sistem file perangkat melalui penyedia sistem. Di iOS, iCloud Drive adalah bagian dari kontainer Sandbox aplikasi, dan file secara otomatis disinkronkan antar perangkat pengguna. Di Android, Google Drive menyediakan API untuk membaca dan menulis file, tetapi tidak ada pemasangan langsung ke sistem file. Untuk aplikasi seluler yang bekerja dengan volume data besar, penyimpanan cloud dapat berfungsi sebagai alternatif untuk kartu SD, terutama pada perangkat tanpa slot perluasan.
Bekerja dengan penyimpanan eksternal di Android tergantung pada versi sistem operasi dan model Scoped Storage. Proses akses file berbeda untuk Android 9 dan yang lebih rendah, Android 10–12, dan Android 13+.
Mulai Android 10, cara utama untuk mengakses file media bersama adalah MediaStore API. API ini menyediakan antarmuka terpadu untuk membaca dan menulis gambar, video, dan file audio di penyimpanan bersama. Aplikasi tidak memerlukan izin READ_EXTERNAL_STORAGE untuk mengakses file sendiri, tetapi untuk membaca file aplikasi lain tetap diperlukan izin eksplisit pengguna. MediaStore secara otomatis mengindeks file media dan menyediakan ContentResolver untuk memintanya.
val collection = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)
} else {
MediaStore.Images.Media.EXTERNAL_CONTENT_URI
}
val projection = arrayOf(
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME
)
val cursor = contentResolver.query(collection, projection, null, null, null)
Setelah menjalankan kueri, Anda mendapatkan Cursor yang berisi URI file. Untuk membaca file, buka InputStream melalui contentResolver.openInputStream(uri). Penulisan dilakukan dengan cara yang sama melalui contentResolver.openOutputStream(uri). MediaStore secara otomatis menangani konflik nama dan menyediakan kemampuan untuk menyisipkan file baru melalui contentResolver.insert(uri, values), yang mengembalikan URI file yang dibuat.
Storage Access Framework (SAF) — metode yang direkomendasikan untuk mengakses file arbitrer di Android 10+. SAF menyediakan dialog sistem pemilihan file, di mana pengguna memberikan akses aplikasi ke file atau direktori tertentu. Aplikasi menerima URI akses yang berlaku hingga perangkat di-restart atau hingga izin dicabut secara eksplisit melalui pengaturan. SAF tidak memerlukan izin READ_EXTERNAL_STORAGE atau WRITE_EXTERNAL_STORAGE, yang menyederhanakan publikasi di Google Play dan mengurangi jumlah permintaan izin.
val requestCode = 42
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
intent.addFlags(
Intent.FLAG_GRANT_READ_URI_PERMISSION
or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
)
startActivityForResult(intent, requestCode)
Di iOS, bekerja dengan file eksternal dilakukan melalui UIDocumentPickerViewController, yang dibuka pengguna untuk memilih file atau direktori tertentu. Aplikasi tidak memiliki akses langsung ke sistem file drive eksternal — hanya ke file yang dipilih secara eksplisit oleh pengguna. Setelah memilih file, aplikasi menerima URL sementara di kontainer Sandbox dan dapat bekerja dengan file melalui FileManager.
UIDocumentPickerViewController memungkinkan pengguna untuk memilih satu atau beberapa file dari sumber mana pun yang tersedia: iCloud Drive, drive USB yang terhubung, layanan cloud pihak ketiga. Setelah pemilihan, controller mengembalikan array URL yang dapat dibaca aplikasi selama sesi. Untuk mempertahankan akses setelah menutup aplikasi, perlu memanggil startAccessingSecurityScopedResource() dan menyimpan bookmark aman di UserDefaults.
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.data, .image],
asCopy: true
)
picker.delegate = self
func documentPicker(
controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
let data = try Data(contentsOf: url)
}
Parameter asCopy: true berarti iOS akan menyalin file ke kontainer Sandbox aplikasi, dan aplikasi akan menerima salinan sendiri yang independen dari file asli. Jika asCopy: false ditentukan, aplikasi menerima referensi ke file asli, tetapi untuk mengaksesnya perlu memanggil url.startAccessingSecurityScopedResource(). Tanpa panggilan ini, membaca file akan menyebabkan pengecualian. Setelah selesai bekerja dengan file, pastikan memanggil url.stopAccessingSecurityScopedResource() untuk menutup sumber daya dan mencegah kebocoran deskriptor.
Keamanan penyimpanan eksternal lebih rendah daripada Internal Storage karena file dapat diakses oleh aplikasi lain. Aplikasi mana pun dengan izin READ_EXTERNAL_STORAGE dapat membaca semua file di kartu SD, termasuk file yang dibuat aplikasi Anda untuk penyimpanan sementara data rahasia. Aplikasi berbahaya dapat memindai kartu SD dan mengekstrak data pengguna jika tidak dienkripsi. Oleh karena itu, sangat tidak disarankan untuk menyimpan token autentikasi, kata sandi, atau data pribadi pengguna di penyimpanan eksternal dalam bentuk terbuka.
Di Android 10+ Scoped Storage secara signifikan membatasi kemampuan aplikasi untuk mengakses sistem file bersama. Aplikasi tanpa izin hanya dapat membaca file yang dibuatnya sendiri, dan untuk mengakses file aplikasi lain diperlukan persetujuan eksplisit pengguna melalui dialog SAF. Namun, pembatasan ini tidak berlaku untuk aplikasi dengan versi SDK target di bawah 29 — mereka terus bekerja dengan model lama, yang menciptakan risiko bagi pengguna yang belum memperbarui aplikasi mereka. Google Play sejak 2021 mewajibkan targetSdkVersion 29+ untuk semua aplikasi baru dan yang diperbarui.
Pemformatan dan enkripsi — aspek keamanan penting lainnya. Kartu SD yang diformat sebagai penyimpanan portabel tidak dienkripsi oleh sistem secara default. Bahkan saat menggunakan adoptable storage, enkripsi hanya diaktifkan jika produsen perangkat menyertakan opsi ini di firmware. Untuk melindungi data rahasia yang disimpan di penyimpanan eksternal, gunakan pustaka EncryptedFile dari AndroidX Security, yang mengenkripsi setiap file secara terpisah menggunakan AES256-GCM, terlepas dari enkripsi sistem.
Penggunaan efektif penyimpanan eksternal membutuhkan keseimbangan antara ketersediaan data dan keamanan. Ikuti aturan berikut untuk memastikan penyimpanan file pengguna yang andal.
Environment.getExternalStorageState() untuk memeriksa status kartu SD. Kartu mungkin telah dilepas, rusak, atau tidak tersedia untuk menulisPenting untuk diingat bahwa penyimpanan eksternal tidak menjamin keutuhan data saat terjadi kegagalan. Kartu SD memiliki sumber daya siklus penulisan ulang yang terbatas, terutama model anggaran kelas Class 4 dan Class 6. Pada penulisan intensif (misalnya, logging atau caching data streaming), kartu dapat rusak dalam beberapa bulan. Untuk skenario seperti itu, gunakan memori internal atau penyimpanan cloud, dan di penyimpanan eksternal simpan hanya file yang kehilangannya dianggap dapat diterima oleh pengguna. StatFs dan beri tahu pengguna tentang kesalahan kritis sistem file.
Pertanyaan yang sering diajukan
Di Android 13+ izin READ_EXTERNAL_STORAGE telah diganti dengan yang lebih granular: READ_MEDIA_IMAGES, READ_MEDIA_VIDEO dan READ_MEDIA_AUDIO. Untuk mengakses jenis file lainnya, gunakan SAF.
Ya, fungsi adoptable storage tersedia di Android 6.0+. Kartu diformat dalam ext4 dengan enkripsi AES-128. Namun, banyak produsen menonaktifkan opsi ini, dan sekitar 88% perangkat tidak mendukung adoptable storage.
Gunakan metode Environment.getExternalStorageState(), yang mengembalikan string status. Nilai MEDIA_MOUNTED berarti kartu tersedia untuk dibaca dan ditulis. Nilai lain menunjukkan kesalahan atau tidak adanya kartu.
Scoped Storage membatasi aplikasi ke kontainernya sendiri dan perpustakaan media MediaStore bersama. Akses penuh memungkinkan membaca file apa pun di perangkat. data pengguna dan wajib untuk aplikasi baru.
Jalankan Intent dengan tindakan ACTION_OPEN_DOCUMENT_TREE, yang akan membuka dialog sistem pemilihan direktori. Setelah memilih, Anda akan mendapatkan izin URI yang berlaku hingga restart. Simpan URI ini di SharedPreferences untuk penggunaan selanjutnya.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga