Перед тем, как клиентское приложение попытается работать с файлом, для которого оно имеет URI контента, приложение может запросить информацию о файле из серверного приложения, включая тип данных файла и размер файла. Тип данных помогает клиентскому приложению определить, может ли оно обрабатывать файл, а размер файла помогает клиентскому приложению настроить буферизацию и кэширование файла.
Этот урок показывает, как запрашивать у серверного приложения FileProvider
для получения MIME-типа и размера файла.[wpanchor id=”1″]
Получить MIME-тип файла
Тип данных файла указывает клиентскому приложению, как оно должно обрабатывать содержимое файла. Чтобы получить тип данных файла по его URI контента, клиентское приложение вызываетContentResolver.getType()
. Этот метод возвращает MIME-тип файла. По умолчанию,FileProvider
определяет MIME тип файла по его расширению.
В следующем фрагменте кода показано, как клиентское приложение извлекает MIME тип файла после того, как серверное приложение вернуло URI контента:
... /* * Get the file's content URI from the incoming Intent, then * get the file's MIME type */ Uri returnUri = returnIntent.getData(); String mimeType = getContentResolver().getType(returnUri); ...
[wpanchor id=”2″]
Получить имя файла и размер
FileProvider
класс имеет реализацию по умолчанию для query()
метода, который возвращает имя и размер файла, связанного с URI контента в Cursor
. Реализация по умолчанию возвращает два столбца:
DISPLAY_NAME
- Имя файла, как
String
. Это значение такое же, как значения, возвращаемоеFile.getName()
. SIZE
- Размер файла в байтах, как
long
Это значение такое же, как значения, возвращаемоеFile.length()
Клиентское приложение может получить оба столбца DISPLAY_NAME
и SIZE
для файла, установив все аргументы в query()
к null
, за исключением URI контента. Например, этот фрагмент кода извлекает DISPLAY_NAME
и SIZE
и отображает каждый в отдельном TextView
:
... /* * Get the file's content URI from the incoming Intent, * then query the server app to get the file's display name * and size. */ Uri returnUri = returnIntent.getData(); Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null); /* * Get the column indexes of the data in the Cursor, * move to the first row in the Cursor, get the data, * and display it. */ 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))); ...
Если не указано иное, этот контент распространяется под лицензией Creative Commons Attribution 2.5. Для получения дополнительной информации и ограничений, см. Лицензия контента.