495 votes

Convertir le fichier: Uri en Fichier dans Android

Quel est le moyen le plus simple de convertir un file: android.net.Uri en un File sur Android?

J'ai essayé ce qui suit mais ça ne marche pas:

  final File file = new File(Environment.getExternalStorageDirectory(), "read.me");
 Uri uri = Uri.fromFile(file);
 File auxFile = new File(uri.toString());
 assertEquals(file.getAbsolutePath(), auxFile.getAbsolutePath());
 

926voto

Adil Hussain Points 3542

Ce que tu veux c'est ...

 new File(uri.getPath());
 

... et pas...

 new File(uri.toString());
 

67voto

Sanket Berde Points 41

Après avoir cherché longtemps, c'est ce qui a fonctionné pour moi:

 File file = new File(getPath(uri));


public String getPath(Uri uri) 
    {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor == null) return null;
        int column_index =             cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String s=cursor.getString(column_index);
        cursor.close();
        return s;
    }
 

27voto

Matthew Flaschen Points 131723

EDIT: Désolé, j'aurais dû tester mieux avant. Cela devrait fonctionner:

 new File(new URI(androidURI.toString()));
 

L'URI est java.net.URI.

15voto

Xylian Points 1076

Non cela ne fonctionne pas, pour moi c'est la solution de travail:

             String[] filePathColumn = { MediaStore.Images.Media.DATA };
            Cursor cursor = getActivity().getContentResolver().query(uri, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();
 

-1voto

SARose Points 53

Pour les gens qui sont ici à la recherche d'une solution pour les images en particulier, c'est ici.

 private Bitmap getBitmapFromUri(Uri contentUri) {
        String path = null;
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = getContentResolver().query(contentUri, projection, null, null, null);
        if (cursor.moveToFirst()) {
            int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            path = cursor.getString(columnIndex);
        }
        cursor.close();
        Bitmap bitmap = BitmapFactory.decodeFile(path);
        return bitmap;
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X