Пользовательские расширения для намерения открыть файл (принудительное расширение) - PullRequest
2 голосов
/ 29 января 2020

Мой код выглядит следующим образом:

@RequiresApi(Build.VERSION_CODES.KITKAT)
private fun selectExportDirectory(activity: FragmentActivity) {
    lastExportName = createNewExportFileName()
    val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
        addCategory(Intent.CATEGORY_OPENABLE)
        type = backupFileType
        putExtra(Intent.EXTRA_TITLE, lastExportName)
    }
    activity.startActivityForResult(intent, exportRequestCode)
}

Что я хочу

Я хочу принудительно выбрать файл с расширением .backup. Намерение позаботится о том, чтобы автоматически настроить выбранный пользователем файл экспорта, если файл уже существует, и я также хочу, чтобы это поведение.

Проблема

  • , если я передам «application / zip» в качестве backupFileType Я могу выбрать «backup» или «backup.zip» в качестве файла экспорта, и android создаст файл «backup.zip» в обоих случаях.
  • если я пропущу » application / backup "as backupFileType Я также могу выбрать" backup "или" backup.backup ", но расширение не будет добавлено автоматически

Можно ли как-то настроить свой код так, чтобы Выбранный пользователем файл всегда получает расширение .backup?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Ответ: Вы просто не можете определить пользовательские типы, о которых ОС не знает.

Решение: Однако, если вы все еще хотите это сделать, вам нужно сделать пользовательский файл выбора с recycleview и передать точки хранения монтирования и рекурсивно перебрать все типы файлов: (добавить фильтр вашего расширения)

public void scanFiles(File file) {
File[] fileArray = file.listFiles(); 
for (File f : fileArray){
    if (f.isDirectory()) 
      scanFiles(f);
    if (f.isFile() && (f.getpath().endswith("..backup") || //any extensions)) {
        //Your custom file are here 
       }
    }
}
0 голосов
/ 09 февраля 2020

Я хочу принудительно выбрать файл с расширением .backup.

Это невозможно, извините. ACTION_CREATE_DOCUMENT не только не поддерживает это, но и не требует, чтобы поставщик документов использовал расширения файлов. EXTRA_TITLE используется для предлагаемого «отображаемого имени», и его не обязательно использовать в качестве имени файла в файле.

Можно ли как-то настроить свой код так, чтобы пользователь выбрал файл всегда получает расширение .backup?

Вы можете использовать ACTION_OPEN_DOCUMENT_TREE, чтобы пользователь выбрал дерево, а затем создал документ внутри этого дерева с любым отображаемым именем, которое вы хотите. Это отображаемое имя может включать расширение суффикса расширения файла. Что провайдер документов делает с этим отображаемым именем, зависит от провайдера; если это поставщик платформы для файловой системы, это отображаемое имя превратится в имя файла.

...