2016-04-26 6 views
0

Я пишу приложение, которое может загружать файлы. Файлы либо принимаются с использованием StartActivityForResult, либо получены через меню общего доступа из других приложений.Android, работающий с URI

У меня возникли проблемы с получением файлов через меню общего доступа, в частности, для определения информации о файле. Перед загрузкой мне нужно знать имя и размер файла. При совместном использовании приложений, таких как приложение галереи или Google Фото, все работает нормально - получен URI с использованием схемы content://, и я могу использовать ContentResolver, чтобы получить имя и размер. Но из некоторых приложений я получаю URI с помощью схемы file://, и тот же метод больше не работает. Есть ли способ получить информацию о файлах из URI с помощью обеих схем? И есть ли способ гарантировать, что он будет работать для всех возможных URI?

код для получения информации о файле:

string folderName = ""; 
Android.Net.Uri tempUri = null; 
switch (Intent.Action) { 
case Intent.ActionSend: 
    var result = Intent.GetParcelableExtra (Intent.ExtraStream); 
    tempUri = Android.Net.Uri.Parse(result.ToString()); 
    break; 
case Intent.ActionSendMultiple: 
    var uris = Intent.GetParcelableArrayListExtra(Intent.ExtraStream); 
    tempUri = Android.Net.Uri.Parse(uris[0].ToString()); 
    break; 
} 

if (tempUri != null) { 
    var cursor = this.ContentResolver.Query (tempUri, null, null, null, null); 
    if (cursor != null && cursor.MoveToFirst()) 
     folderName = cursor.GetString (cursor.GetColumnIndex (Android.Provider.OpenableColumns.DisplayName)); 
} 

ответ

1

Есть ли способ, чтобы получить информацию о файле из URI, с обеими схемами?

file: Оберните или content:Uri в a DocumentFile. Затем позвоните по телефону getType() и length() по телефону DocumentFile. В случае file: и getType() я полагаю, что DocumentFile использует MimeTypeMap под крышками, чтобы попытаться угадать тип MIME.

И есть ли способ гарантировать, что он будет работать для всех возможных URI?

Номер

Смежные вопросы