Основная часть решения ниже:
у получить фактический путь из Uri, когда я выбираю файл, используя намерение, тогда он будет возвращать URI, но ниже строки кода не работает для преобразования URI в путь строки
Открыть FilePicker
public static void PickFile(Activity context)
{
Intent intent = new Intent(Intent.ActionGetContent);
intent.SetType("*/*");
context.StartActivityForResult(intent, PICKFILE_RESULT_CODE);
}
Получить результат
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if(requestCode == PICKFILE_RESULT_CODE)
{
string filepath = GetRealPathFromURI(MainActivity.act, data.Data);
}
}
public static string GetRealPathFromURI(Activity act, Android.Net.Uri contentURI)
{
try
{
ICursor cursor = act.ContentResolver.Query(contentURI, null, null, null, null);
cursor.MoveToFirst();
string documentId = cursor.GetString(0);
documentId = documentId.Split(':')[1];
cursor.Close();
cursor = act.ContentResolver.Query(
MediaStore.Images.Media.ExternalContentUri,
null, MediaStore.Images.Media.InterfaceConsts.Id + " = ? ", new[] { documentId }, null);
cursor.MoveToFirst();
string path = cursor.GetString(cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data));
cursor.Close();
return path;
}
catch(Exception e)
{
Log.Debug("TAG_DATA",e.ToString());
return "";
}
}
ошибка
System.IndexOutOfRangeException: индекс находился за пределами массива.
Может кто-нибудь объяснить мне, что не так, думаю, что я делаю в этом коде.