ContentResolver – как получить имя файла от Uri

Я вызываю startActivityForResult с Intent ACTION_GET_CONTENT . Некоторые приложения возвращают мне данные с этим Uri :

Содержание: // СМИ / внешние / изображения / СМИ / 18122

Я не знаю, является ли это образ или видео или какой-то пользовательский контент. Как использовать ContentResolver для получения фактического имени файла или заголовка контента из этого Uri?

Вы можете получить имя файла из этого кода или любое другое поле, изменив проекцию

 String[] projection = {MediaStore.MediaColumns.DATA}; ContentResolver cr = getApplicationContext().getContentResolver(); Cursor metaCursor = cr.query(uri, projection, null, null, null); if (metaCursor != null) { try { if (metaCursor.moveToFirst()) { path = metaCursor.getString(0); } } finally { metaCursor.close(); } } return path; 

@ Ответ Durairaj специфичен для получения пути к файлу. Если то, что вы ищете, является фактическим именем файла (так как вы должны использовать Content Resolution, в этот момент вы, вероятно, получите много контента: // URI), вам нужно будет сделать следующее:

(Код скопирован из ответа Durairaj и изменен)

  String[] projection = {MediaStore.MediaColumns.DISPLAY_NAME}; Cursor metaCursor = cr.query(uri, projection, null, null, null); if (metaCursor != null) { try { if (metaCursor.moveToFirst()) { fileName = metaCursor.getString(0); } } finally { metaCursor.close(); } } 

Основная особенность здесь заключается в том, что мы используем MediaStore.MediaColumns.DISPLAY_NAME , которая возвращает фактическое имя содержимого. Вы также можете попробовать MediaStore.MediaColumns.TITLE , так как я не уверен, в чем разница.

Вы можете использовать решение, предложенное Durairaj, в качестве проекционного массива:

 String[] projection = { "_data" };