2016-02-22 2 views
0

j'invoque chooser de fichier avec le code ci-dessous:Impossible de récupérer le chemin absolu du fichier à partir du fichier android chooser

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
startActivityForResult(intent, 1); 

Dans la méthode onActivityResult Je crée un objet de fichier avec le chemin obtenu par

File file=new File(data.getData().getPath()); 

Mais j'observe que le chemin renvoyé par la méthode getPath() n'est pas reconnu par la classe File. Par conséquent, le fichier n'est jamais lu. J'ai vu peu de solution sur le web mais aucune d'entre elles ne semble fonctionner. Chemin ressemble à ceci

contenu: /com.android.providers.media.documents/document/image%3A15651

Est-ce que je manque quelque chose?

test Am sur un Samsung Galaxy Note 3 (Android 5,1)

Répondre

1

j'invoque chooser de fichier avec le code ci-dessous:

Ce n'est pas un sélecteur de fichiers. Il choisit le contenu.

Dans la méthode onActivityResult je crée un objet de fichier avec le chemin obtenu par

qui n'a jamais fonctionné de manière fiable. Il est plutôt peu fiable sur Android 4.4 et supérieur. data, dans ce cas, est un Uri. Ce Uri pointe vers le contenu, tout comme l'URL de ce navigateur Web pointe vers le contenu. Un Uri ne doit pas du tout pointer vers un fichier, encore moins un fichier auquel votre application peut accéder. Pour accéder au contenu représenté par un Uri, utilisez ContentResolver. En particulier, openInputStream() renverra un InputStream sur le contenu pointé par le Uri.

+0

Merci pour l'explication. Came à travers la solution ici http://stackoverflow.com/a/25302933/3900531 – Ranjan

+0

@Ranjan: Cela ne fonctionnera que si l'utilisateur arrive à choisir le contenu d'une application qui renvoie un «Uri» du «MediaStore». Ce code va casser n'importe quoi d'autre, comme un 'Uri' renvoyé par Google Drive, Dropbox ou toute autre application qui choisit d'offrir une activité' ACTION_GET_CONTENT'. – CommonsWare