如何将拍摄的照片添加到MediaStore

时间:2014-02-17 07:05:52

标签: android android-mediascanner

我想将照片添加到MediaStore,以便Gallery应用可以找到它们(无需重启设备)。 App的min sdk是9.任何帮助,博客或文档赞赏。

4 个答案:

答案 0 :(得分:6)

在大多数设备上,您需要做的就是等待一段时间,然后自动检测新照片。

如果您希望立即刷新图库,则需要使用MediaScanner类,它将刷新图库 - 删除已删除的照片,添加新照片等等...

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);
}

希望这有帮助!

答案 1 :(得分:1)

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

在“保存”代码后插入此行代码。

这将触发媒体扫描,所有文件夹中的所有媒体文件(“。nomedia”文件除外)都将更新&在画廊中可见。

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

答案 2 :(得分:0)

好吧我的代码,它对我有用它给我在Android Gallery中可以看到的所有图像只是从这一行调用此函数

 getallimages(Environment.getExternalStorageDirectory());

我的功能在

之下
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);   

            }
 }

}

答案 3 :(得分:0)

您可以要求MediaScanner根据需要扫描特定文件,即您的图像文件。与仅要求MediaScanner扫描新文件的所有内容相比,这应该产生更少的开销。

SO: how to run media scanner in android