j'ai bouton pour joindre un fichierXamarin: GetRealPathFromURI travaille pour des images mais pas pour d'autres fichiers
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);
}
Après avoir sélectionné un fichier, je peux obtenir le vrai chemin si elle est une image. Si ce n'est pas une image (PDF, DOCX), ça ne marche pas! Par exemple, voici le chemin de retour après avoir sélectionné une image:
"/storage/0403-0201/Pictures/beach_huts.jpg"
mais après avoir sélectionné un fichier, cette erreur apparaît
Android.Database.CursorIndexOutOfBoundsException: Index 0 demandé, avec une taille de 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;
}
Merci, mais cette erreur est survenue lorsque je tente de le convertir en octet [] .... System.IO.DirectoryNotFoundException: Impossible de trouver une partie du chemin "/document/primary:Test.pdf". –
@AhmedAbdElhalem Vous avez affaire à 'document primaire:' emplacements, vous devrez utiliser 'DocumentContracts' et vérifier les niveaux SDK, voici un bon point de départ pour montrer comment vous gérez' DocumentsContract', les fichiers téléchargés, et mediastore-based fichiers via 'MediaProvider', il est en Java, mais il convertit rapidement en C#: http://stackoverflow.com/a/20559175/4984832 – SushiHangover
Merci, ses travaux –