Этот код отлично работает для выбора файла с SDCard.
Не обязательно. В конце концов, файлы не должны иметь расширения. README
является допустимым именем файла и не имеет расширения файла.
Но если я выберу файл на диске или Dropbox в строке 4, я получу ошибку
Конечно. Для Uri
нет необходимости иметь расширение файла. Например, /10319790/poluchenie-rasshireniya-faila-iz-dropbox-ili-draivera-posle-onactivityresult
является Uri
и не имеет расширения файла.
Если data.getData().getScheme()
вернет file
, вы можете попробовать свой алгоритм, но он не будет работать README
.
Если data.getData().getScheme()
возвращает content
, вы можете использовать getContentResolver().getType(data.getData())
, чтобы получить тип MIME для содержимого. Затем вы можете попытаться использовать MimeTypeMap
для определения расширения файла, хотя MimeTypeMap
не обрабатывает все возможные типы MIME.
В целом, вам необходимо пересмотреть свои планы, чтобы вам не нужны расширения файлов.