#android #android-sdcard #mediastore #android-external-storage #android-storage
Вопрос:
Для общедоступных папок МУЛЬТИМЕДИА вместо Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
того, чтобы мы могли использовать:
values.put(MediaStore.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
uri = resolver.insert(
MediaStore.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),
values
)
Но что мы можем использовать вместо Context.externalMediaDirs
этого?
Или личные медиа-папки каждого приложения сейчас устарели и их вообще не следует использовать?
Обновить
Я думаю, да, потому что теперь у нас есть MediaStore.getExternalVolumeNames(context)
Android SDK 29, который может даже возвращать имя тома съемной карты microSD и сохранять медиафайлы в общедоступных папках мультимедиа.
Мы очень долго не могли этого сделать на Android в предыдущих версиях SDK, и теперь это возможно (странно)
На предыдущих SDK для Android мы могли использовать Context.externalMediaDirs[1]
для получения пути к носителю частного приложения съемной карты microSD, но получить общедоступную папку с носителями было невозможно
Но это так плохо, что мы должны поддерживать как минимум SDK 21 и иметь много кода для реализации приложения, которое будет поддерживать вторичное хранилище (съемную карту microSD) для всех версий
Обновление 2
Вот простой пример (жестко [0]
закодированный и [1]
, конечно, просто для удобства объяснения):
Android 29 :
val volumeNames = MediaStore.getExternalVolumeNames(context).toTypedArray()
val phoneSdCard: String = volumeNames[0]
// external_primary == /storage/emulated/0/DCIM
val removableMicroSdCard: String = volumeNames[1]
// 12f7-270f == /storage/12F7-270F/DCIM
// which are used to work with MediaStore:
values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM)
uri = resolver.insert(
MediaStore.Images.Media.getContentUri( phoneSdCard OR removableMicroSdCard ),
values
)
Android 21-28:
val phoneSdCard: File = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
// /storage/emulated/0/DCIM
val removableMicroSdCard: File = context.externalMediaDirs[1]
// /storage/12F7-270F/Android/media/com.example.app
// so on older versions there is no way to write media files at /storage/12F7-270F/DCIM