Cómo obtener la ruta real de Android Uri Xamarin
Quiero obtener la ruta real de Uri, cuando selecciono el archivo con intención, me devolverá el URI, pero debajo de la línea de código no funciona para la conversión del URI a la ruta de la cadena
Abrir FilePicker
public static void PickFile(Activity context)
{
Intent intent = new Intent(Intent.ActionGetContent);
intent.SetType("*/*");
context.StartActivityForResult(intent, PICKFILE_RESULT_CODE);
}
Obtener 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 "";
}
}
Error
System.IndexOutOfRangeException: el índice estaba fuera de los límites de la matriz.
¿Alguien puede explicarme qué está mal pensar que estoy haciendo en este código?