getexternalstoragedirectory показывает только собственные и эмулированные каталоги - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь показать папку загрузки в моем файловом обозревателе. Однако Android 9, когда я использую метод getexternalstoragedirectory (), показывает только собственные и эмулированные каталоги, и если я нажимаю «эмулированный», я не вижу больше папок, он показывает пустую папку.

Так что это как я понимаю путь, он отлично работает в других Android версиях, но Android 9. Любое руководство будет оценено

val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath

Ответы [ 4 ]

0 голосов
/ 31 марта 2020

Я не уверен, какую пользу вы дадите пути. Вы сохраняете этот путь в общих настройках и используете его позже?

Убедитесь, что на устройстве не сохранены старые данные, сохраненные для вашего приложения, если они у вас есть, даже после удаления и повторной установки проблема будет существовать. Убедитесь, что ваш путь не загружен из локальных данных. Если это так, вы должны очистить данные вручную, а затем установить флажок allowbackup в Манифесте на FALSE. Проверьте официальную документацию для тега резервного копирования в здесь

Сохраненные пути данных могут вызвать странное поведение, если путь больше не существует, и вы пытаетесь использовать его позже.

Дайте мне знать, если это поможет.

<application
    android:name="com.name.xxx.YouApp"
    android:allowBackup="false"
0 голосов
/ 25 марта 2020

На некоторых устройствах и в более новых Android версиях Environment.getExternalStorageDirectory() больше не возвращает правильный путь. Попробуйте использовать Context.getExternalFilesDir(null) вместо этого, он должен вернуть этот путь: /storage/emulated/0/Android/data/your.package.name/.

Попробуйте, чтобы узнать, в этом ли проблема. Вот do c.

Источник: Из принятого ответа на этот Вопрос написан в каталоге загрузки

0 голосов
/ 28 марта 2020

попробуйте Context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)

здесь есть ссылка с ответом в kotlin здесь

и, как ни странно, лучшая документация на это я нашел от Microsoft

0 голосов
/ 25 марта 2020

Ну, Android 9 (API 28) не должно иметь этой проблемы. Однако, как указано в Android документах, getExternalStoragePublicDirectory () устарело в Android Q (ndroid 10 - API 29), однако вы можете использовать MediaStore с Относительный путь (добавлено на уровне API 29) для доступа к каталогу Downloads.

Поскольку Relative Path применимо только для API уровня 29 и выше, вы можете использовать его для API 29 и выше и использовать getExternalStoragePublicDirectory() для более старых API. (Предполагая, что вы использовали необходимые разрешения на чтение / запись)

Таким образом, ваш код может выглядеть примерно так -

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
    val resolver = context.contentResolver    
    val contentValues = ContentValues().apply {
            put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
          }
    val uri = resolver.insert(MediaStore.Files.getContentUri("external"), contentValues)
}else{
    val dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).absolutePath
}

Подробнее о доступе к общему хранилищу мультимедийных форм можно узнать здесь - Доступ к медиафайлам из общего хранилища .

...