111 votes

android - enregistrer l'image dans la galerie

j'ai une application avec une galerie d'images et je veux que l'utilisateur peut enregistrer dans sa propre galerie. J'ai créé une option de menu d'une seule voix "enregistrer" pour permettre cela, mais le problème est...comment puis-je enregistrer l'image dans la galerie?

c'est mon code:

@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
            case R.id.menuFinale:

                imgView.setDrawingCacheEnabled(true);
                Bitmap bitmap = imgView.getDrawingCache();
                File root = Environment.getExternalStorageDirectory();
                File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");
                try 
                {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(CompressFormat.JPEG, 100, ostream);
                    ostream.close();
                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }



                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

je ne suis pas sûr de cette partie de code:

File root = Environment.getExternalStorageDirectory();
                File file = new File(root.getAbsolutePath()+"/DCIM/Camera/img.jpg");

est-il correct de les enregistrer dans la galerie? malheureusement, le code ne fonctionne pas :(

187voto

sfratini Points 1814
MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription);

L'ancien code d'ajouter l'image à la fin de la galerie. Si vous souhaitez modifier la date de sorte qu'il apparaît au début ou à toute autre métadonnées, voir le code ci-dessous (Cortesy de S-K):

https://gist.github.com/samkirton/0242ba81d7ca00b475b9

53voto

Sigrist Points 311

En fait, vous pouvez vous sauver de l'image à n'importe quel endroit. Si vous souhaitez enregistrer dans un espace public, de sorte que toute autre application peut accéder, utilisez ce code:

storageDir = new File(
    Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES
    ), 
    getAlbumName()
);

L'image ne va pas à l'album. Pour ce faire, vous devez appeler un scan:

private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

Vous pouvez trouver plus d'informations sur https://developer.android.com/training/camera/photobasics.html#TaskGallery

14voto

Cédric Julien Points 24177

Selon ce cours, la bonne façon de le faire est :

Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES
    )

thios va vous donner le chemin d'accès racine de la galerie répertoire.

12voto

nitin Sol Points 31
private void galleryAddPic() {
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}

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