Como obter o caminho real do Uri xamarin android
Eu quero obter o caminho real de Uri, quando seleciono o arquivo usando intent, ele retornará o URI, mas abaixo da linha de código não está funcionando para a conversão do URI no caminho da string
Abra o FilePicker
public static void PickFile(Activity context)
{
Intent intent = new Intent(Intent.ActionGetContent);
intent.SetType("*/*");
context.StartActivityForResult(intent, PICKFILE_RESULT_CODE);
}
Obter resultado
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 "";
}
}
Erro
System.IndexOutOfRangeException: o índice estava fora dos limites da matriz.
alguém pode me explicar, o que há de errado que eu estou fazendo neste código.