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

问题描述:

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

在大多数设备上,您只需稍等片刻即可自动检测新照片。

如果你想瓶坯立即刷新到图库,您需要使用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); 
} 

希望这有助于!

+0

改变'ACTION_MEDIA_MOUNTED'用'ACTION_MEDIA_SCANNER_SCAN_FILE'解决的问题。编辑你的答案,所以我接受这是正确的答案! –

+0

完成,谢谢!我已经学到了一些新的自己:-) – gilonm

+0

为较老的android-s做这项工作?我有一台android-4.2平板电脑,其中扫描单个文件不会工作,而其他android-4.4手机上的相同代码工作。随着android-4.2我可以开始扫描整个SD卡,但不是一个单一的文件。这是一个Android 4.2的问题或只是我的a-4.2平板电脑的问题? – k3b

确定了我的代码,它为我工作它给,我可以在Android图库查看所有图片刚刚从该行

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

      } 
} 

} 

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

+0

这是一个非常耗时的过程。我只想添加一个文件! –

+0

我不知道如何只需添加一个文件。您将不得不重新扫描整个文件系统,或等待android系统自动为您完成。 –

+0

我添加了另一种方法,我发现在developers.android.com希望它可以帮助! –

您可以要求MediaScanner扫描特定文件,即按需扫描您的图像文件。这应该比仅让MediaScanner扫描所有文件以获得更少的开销。

SO: how to run media scanner in android