у меня есть кнопка, чтобы прикрепить файлXamarin: GetRealPathFromURI работает для изображений, но не для других файлов
private void ImgAttach_Click(object sender, EventArgs e)
{
var _Intent = new Intent();
_Intent.SetType("*/*");
_Intent.SetAction(Intent.ActionGetContent);
StartActivityForResult(Intent.CreateChooser(_Intent, "Select File"), 0);
}
После выбора файла, я могу получить реальный путь, если это изображение. Если это не изображение (PDF, DOCX), оно не работает! Например, вот путь возвращается после выбора изображения:
"/storage/0403-0201/Pictures/beach_huts.jpg"
, но после выбора файла, эта ошибка появляется
Android.Database.CursorIndexOutOfBoundsException: Индекс 0 просил, с размером 0
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (resultCode == Result.Ok)
{
Android.Net.Uri selectedUri = data.Data;
////////////////////////
string s = GetRealPathFromURI(selectedUri);
}
}
private string GetRealPathFromURI(Android.Net.Uri contentURI)
{
Android.Database.ICursor cursor = ContentResolver.Query(contentURI, null, null, null, null);
cursor.MoveToFirst();
string documentId = cursor.GetString(0);
documentId = documentId.Split(':')[1];
cursor.Close();
cursor = ContentResolver.Query(
Android.Provider.MediaStore.Images.Media.ExternalContentUri,
null, Android.Provider.MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new[] { documentId }, null);
cursor.MoveToFirst();
string path = cursor.GetString(cursor.GetColumnIndex(Android.Provider.MediaStore.Images.ImageColumns.Data));
cursor.Close();
return path;
}
Спасибо, но это ошибка, когда я пытаюсь преобразовать его в байт [] .... System.IO.DirectoryNotFoundException: Не удалось найти часть пути «/document/primary:Test.pdf». –
@AhmedAbdElhalem Вы имеете дело с 'document primary:' location, вам нужно будет использовать 'DocumentContracts' и проверять уровни SDK, вот хорошая отправная точка, чтобы показать, как вы имеете дело с' DocumentsContract', загружаемыми файлами и средопользователями файлы через «MediaProvider», он находится на Java, но быстро преобразуется в C#: http://stackoverflow.com/a/20559175/4984832 – SushiHangover
Спасибо, его работы –