web-dev-qa-db-fra.com

Obtenir le chemin et le nom de fichier du résultat d'intention de la caméra

Je souhaite créer une image avec l'objectif de l'appareil photo et l'enregistrer dans le dossier DCIM par défaut. Ensuite, je veux obtenir le chemin/nom du fichier où l'image est stockée.

Je l'essaie avec le code suivant:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, TAKE_PICTURE);

Avec ce code, la caméra s'ouvre et après avoir pris une photo, elle se ferme et la sauvegarde dans le dossier d'images par défaut (généralement/dcim/camera ou sdcard/dcim/camera ...)

mais comment puis-je obtenir le chemin et le nom du fichier de la photo prise maintenant? J'ai essayé presque tout dans onActivityResult j'ai essayé

String result = data.getData();

et

String result = data.getDataString();

et

String result = data.toURI();

et

Uri uri = data.getData();

etc.

J'ai recherché les deux derniers jours pour trouver une solution à ce problème. Il existe de nombreux articles sur le Web et sur stackoverflow, mais rien ne fonctionne. Je ne veux pas de vignette, je veux seulement le chemin (uri?) Vers l'image prise par la caméra.

Merci pour toute aide

EDIT: Quand j'essaye:

path=Environment.DIRECTORY_DCIM + "/test.jpg";
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_PICTURE); 

il ne stocke pas l'image en tant que test.jpg mais avec le nom d'image normal 2011-10-03 ..... jpg (mais c'est correct aussi, j'ai seulement besoin du chemin d'accès à l'image, peu importe le nom est).

Meilleures salutations

EDIT Again

path=Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/";
File file = new File(path,"test111111111.jpg");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

startActivityForResult(intent, TAKE_PICTURE); 

Lorsque j'essaye cela, il stocke l'image dans le bon dossier et avec le nom indiqué (par exemple, test111111.jpg). Mais comment puis-je obtenir le chemin du fichier maintenant dans onActivityResult?

17
bihcoder

La photo sera stockée deux fois, d’abord sur le dossier de la galerie, puis sur le fichier spécifié dans la méthode putExtra (MediaStore.EXTRA_OUTPUT, chemin).

Vous pouvez obtenir la dernière photo prise en train de le faire:

/**
 * Gets the last image id from the media store
 * @return
 */
private int getLastImageId(){
    final String[] imageColumns = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA };
    final String imageOrderBy = MediaStore.Images.Media._ID+" DESC";
    Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy);
    if(imageCursor.moveToFirst()){
        int id = imageCursor.getInt(imageCursor.getColumnIndex(MediaStore.Images.Media._ID));
        String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
        Log.d(TAG, "getLastImageId::id " + id);
        Log.d(TAG, "getLastImageId::path " + fullPath);
        imageCursor.close();
        return id;
    }else{
        return 0;
    }
}

Cet exemple était basé sur le message suivant: Suppression d'une image de la galerie après la prise d'une photo de l'intention de l'appareil photo

6
Derzu

vous pouvez utiliser comme ceci dans onActivityResult ()

if(requestCode==CAMERA_CAPTURE)
    {

        Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
        if(cursor != null && cursor.moveToFirst())
        {
            do 
            {
                String picturePath =cursor.getString(cursor.getColumnIndex(Media.DATA));
               Uri selectedImage = Uri.parse(picturePath);

            }
            while(cursor.moveToNext());
                cursor.close();
            File out = new File(picturePath);
            try 
            {
                mOriginal = decodeFile(out);
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


            mSelected.setImageBitmap(mOriginal);
        }
    }
1
Pranav

Lorsque vous démarrez le ACTION_IMAGE_CAPTURE, vous pouvez transmettre un MediaStore.EXTRA_OUTPUT supplémentaire en tant que URI du fichier dans lequel vous souhaitez enregistrer la photo.

Voici un exemple simple:

   File file = new File(path);
   Uri outputFileUri = Uri.fromFile(file);

   Intent intent = new Intent(Android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
   intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

   startActivityForResult(intent, TAKE_PICTURE); 

MODIFIER: Je viens d'essayer sur mon appareil et file.createNewFile() a résolu le problème pour moi.

0
Ovidiu Latcu