Я пишу приложение, которое может загружать файлы. Файлы либо принимаются с использованием 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));
}