Подтвердить что ты не робот

Андроид просматривает намерение файла с определенным расширением

Мне нужно создать намерение, которое откроет диспетчер файлов (если он установлен), и я хочу, чтобы диспетчер файлов отображал только файлы txt для пользователя, поэтому пользователь не мог выбрать файл с неправильным расширением.

    private static final int FILE_SELECT_CODE = 0;

private void showFileChooser() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("*/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);


    try {
        startActivityForResult(
                Intent.createChooser(intent, "Select txt file"),
                FILE_SELECT_CODE);
    } catch (android.content.ActivityNotFoundException ex) {
        // Potentially direct the user to the Market with a Dialog
        Toast.makeText(this.getActivity(), "Please install a File Manager.", 
                Toast.LENGTH_SHORT).show();
    }
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case FILE_SELECT_CODE:      
    if (resultCode == Activity.RESULT_OK) {  
        // Get the Uri of the selected file 
        Uri uri = data.getData();
        String path = uri.getPath();
        input = new File(path);
        try {
            txtParser = new TxtFileParser(input);
        } catch (FileNotFoundException e) {
            /* Exception handler must be here! */
        }
    }           
    break;
}
    super.onActivityResult(requestCode, resultCode, data);
}

Мне удалось это сделать. Но я не знаю, как определить расширения txt.

4b9b3361

Ответ 1

Я хочу, чтобы диспетчер файлов показывал пользователю только файлы txt, поэтому пользователь не мог выбрать файл с неправильным расширением

Это невозможно. Вы можете использовать тип MIME text/plain вместо */*, но:

  • Нет гарантии, что это приведет только к возврату файлов с расширением .txt
  • Нет гарантии, что на устройстве есть приложение, которое может обрабатывать ACTION_GET_CONTENT этого типа MIME
  • Нет никакой гарантии, что любой "файловый менеджер" будет соблюдать ваш тип MIME; они могут выбрать отображение всех файлов в любом случае

Ответ 2

выполните исследования MaterialFilePicker().

new MaterialFilePicker(). withFilter (Pattern.compile( ". * \. txt $" )). start();

как показано выше, вы можете сделать это с помощью сопоставления с образцом.