Получить расширение файла выбранного файла из намерения

Я запускаю намерение запустить средство выбора файлов, где пользователь может выбрать файл PDF для использования и загрузки на сервер.

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
startActivityForResult(intent,1);

когда они выбирают файл, он возвращается к onActivityResult, где я смотрю на Uri файла, чтобы увидеть, содержит ли он .pdf

if(requestCode == 1 && resultCode == RESULT_OK){
    Uri filePath = data.getData();
    File file = new File(filePath.getPath());
    if(filePath.toString().contains(".pdf")){
        if(file.length() <= 1048576){
            de.setPDFUri(filePath.toString());
        }else{
            Toast.makeText(this,"PDF cannot be more than 1 MB, please select another", Toast.LENGTH_SHORT).show();
        }
    }else{
        Toast.makeText(this,"Can only upload PDF files", Toast.LENGTH_SHORT).show();
    }
}

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

file:///storage/sdcard0/Download/20131231103232738561744.pdf

и в других программах (встроенные приложения от производителя - единственные, которые я видел до сих пор) я получаю такой возврат

content://media/external/file/109

что, очевидно, ничего не говорит мне о файле и его типе и возвращает информацию ContentProvider для этого файла.

Есть ли способ разрешить пользователю выбирать только .pdf файлы, отправив что-то в намерении или способ проверить uri и убедиться, что это файл .pdf?


person tyczj    schedule 12.02.2014    source источник
comment
Этот вопрос дает некоторые идеи о том, как вы можете получить путь к файлу из URI контента: stackoverflow.com/questions/20067508   -  person NigelK    schedule 13.02.2014


Ответы (2)


Вы можете ограничить тип файла, который может быть выбран из намерения, указав тип файла MIME в функции setType. Чтобы запретить пользователю выбирать только файлы PDF, вы можете указать:

intent.setType("application/pdf");

person Dani Akash    schedule 24.02.2017

намерение.setType("приложение/pdf");

person Srinivas Keerthiprakasam    schedule 24.02.2017