Перед тем, как клиентское приложение попытается работать с файлом, для которого оно имеет URI контента, приложение может запросить информацию о файле из серверного приложения, включая тип данных файла и размер файла. Тип данных помогает клиентскому приложению определить, может ли оно обрабатывать файл, а размер файла помогает клиентскому приложению настроить буферизацию и кэширование файла.

Этот урок показывает, как запрашивать у серверного приложения FileProvider для получения MIME-типа и размера файла.

Получить 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);
    ...

 

Получить имя файла и размер


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. Для получения дополнительной информации и ограничений, см. Лицензия контента.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.