Прежде чем начать работать с файлом, клиентское приложение может получить информацию о файле от серверного приложения, включая типа данных и размер файла. Тип данных позволяет определить, может ли клиентское приложение его обработать, а размер файла помогает выделить под него место в памяти и кэше.
В уроке мы покажем как запросить у серверного приложения объект FileProvider для получения MIME типа и размера файла.
Получение MIME типа файла
Тип файла показывает, как приложение должно обрабатывать его содержимое. Чтобы получить тип файла по его URI, клиентское приложение может вызвать метод ContentResolver.getType(). Метод возвращает MIME тип. По умолчанию, FileProvider определяет тип файла по его расширению.
В следующем примере показано как запросить тип файла по его URI:
1 2 3 4 5 6 |
... // Получаем URI файла из намерения Uri returnUri = returnIntent.getData(); // Получаем тип файла String mimeType = getContentResolver().getType(returnUri); ... |
Получение имени и размера файла
Класс FileProvider имеет стандартную реализацию метода query(), с помощью которого можно получить имя и размер файла по его URI, используя объект типа Cursor. Стандартная реализация возвращает два столбца:
- DISPLAY_NAME
- Имя файла в виде строкового объекта String. Такое же значение возвращает метод File.getName().
- SIZE
- Размер файла в байтах, тип значения
long
. Такое же значение возвращает метод File.length().
Можно получить сразу оба значения, если в метод query()
передать в качестве всех аргументов, null
, кроме URI. В следующем примере мы получим DISPLAY_NAME
и SIZE
файла и отобразим эти значения в разных TextView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
... /* * Получаем URI файла из намерения, чтобы получить название и размер файла. */ Uri returnUri = returnIntent.getData(); Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null); /* * Получаем порядковые номера столбцов в Cursor, * ставим курсор на первую строку, получаем данные и показываем их. */ int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); returnCursor.moveToFirst(); TextView nameView = (TextView) findViewById(R.id.filename_text); TextView sizeView = (TextView) findViewById(R.id.filesize_text); nameView.setText(returnCursor.getString(nameIndex)); sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex))); ... |