2014-12-03 1 views
1

Я получаю намерения, отправленные с использованием механизма распределения по умолчанию (ACTION_SEND) из разных приложений.Легкий и универсальный способ получить имя файла, совместно используемое с ACTION_SEND

Если это файл - мне нужно его скопировать.
Мне не нужен полный путь к файлу, так как я могу открыть его напрямую с помощью потока.

InputStream input = getContentResolver().openInputStream(fileUri); 

Но мне нужно знать имя файла, чтобы сохранить файл правильно.

Есть ли простой и универсальный способ получить имя файла общего доступа, не обращая внимания на тип контента (это может быть изображение из галереи, видео, файлов из загрузок)?


Или я должен использовать что-то вроде этого, чтобы получить полный путь от Ури, а затем получить имя файла из него?

Get real path from URI, Android KitKat new storage access framework [duplicate]
Android Gallery on KitKat returns different Uri for Intent.ACTION_GET_CONTENT


Кроме того, я видел эту статью (A Uri Is Not (Necessarily) a File) и там сказано:

Вы можете выполнить следующие операции на таких значениях Uri:

  • Узнайте их DISPLAY_NAME и SIZE - t он OpenableColumns - через запрос() на Uri (опять же, используя ContentResolver, или в теории с CursorLoader)

возможно ли это? Как я могу это сделать?

ответ

2

В соответствии с интерфейсом MediaStore столбец DISPLAY_NAME действительно поставляется.

Cursor cursor = getContentResolver().query(fileUri, projection, null, null, null); 

проекция содержит display_name

cursor.moveToFirst(); 
if (cursor.getCount() > 0) { 
    // get your file name 
} 

я не проверил его, но он должен работать ;-)