Альтернатива MediaStore для устаревшего контекста.

#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