Question

I want to add taken photos to MediaStore so Gallery app can find them (without restarting device). App's min sdk is 9. Any help, blog or documentation appreciated.

Was it helpful?

Solution

On most devices, all you need to do is wait a little while and the new photos will be detected automatically.

If you want to preform an immediate refresh to the gallery, you need to use the MediaScanner class, It will refresh the gallery - remove deleted photos, add new ones and so on...

public void refreshGallery() {
    Intent scanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    String newPhotoPath = "file:" + image.getAbsolutePath(); // image is the created file image
    File file = new File(newPhotoPath);
    Uri contentUri = Uri.fromFile(file);
    scanIntent.setData(contentUri);
    sendBroadcast(scanIntent);
}

Hope this helped!

OTHER TIPS

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

Insert this line of code after your 'save' code.

This will trigger a media scan and all media files in all folders (except with '.nomedia' files) will be updates & visible in gallery.

Source.

MediaScanner Documentation.

OR

// Tell the media scanner about the new file so that it is
// immediately available to the user.
MediaScannerConnection.scanFile(this,
        new String[] { file.toString() }, null,
        new MediaScannerConnection.OnScanCompletedListener() {
    public void onScanCompleted(String path, Uri uri) {
        Log.i("ExternalStorage", "Scanned " + path + ":");
        Log.i("ExternalStorage", "-> uri=" + uri);
    }
});

Google's Sample Code.

ok its my code and it work for me it give all images which i can see in Android Gallery just call this function from this line

 getallimages(Environment.getExternalStorageDirectory());

and my function is below

private void getallimages(File dir)
    {

                String[] STAR = { "*" };

        final String orderBy = MediaStore.Images.Media.DEFAULT_SORT_ORDER;
        Cursor imagecursor = cntx.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, STAR, null, null, orderBy);
        int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);
        int count = imagecursor.getCount();
        for (int i = 0; i < count; i++) {
            imagecursor.moveToPosition(i);
            int id = imagecursor.getInt(image_column_index);
            ImageItem imageItem = new ImageItem();

            if(new File(imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA))).length()<=10485760)
            {
                imageItem.filePath = imagecursor.getString(imagecursor.getColumnIndex(MediaStore.Images.Media.DATA));

                    imageItem.id = id;
                    imageItem.selection = false; //newly added item will be selected by default
                    controller.images.add(imageItem);   

            }
 }

}

You can ask the MediaScanner to scan a specific file, ie your image file on demand. This should produce less overhead than just asking the MediaScanner to scan everything for new files.

SO: how to run media scanner in android

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top