Я запускаю намерение запустить средство выбора файлов, где пользователь может выбрать файл 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?