如何在android中运行媒体扫描程序

时间:2012-11-07 13:29:07

标签: android android-camera android-gridview android-mediascanner

我想在拍摄图像时运行媒体扫描仪。捕获后,图像在网格视图中更新。为此,我需要运行媒体扫描仪。我找到了两种解决方案来运行媒体扫描程序一种是广播事件,另一种是运行媒体扫描程序类。我认为在Ice Cream Sandwich(4.0)中引入了媒体扫描程序类。在版本之前需要设置广播事件来运行媒体扫描程序。

任何人都可以指导我如何以正确的方式运行媒体扫描仪。

1 个答案:

答案 0 :(得分:28)

如果您知道文件名,我发现在特定文件上运行媒体扫描程序(与运行它以扫描媒体的所有文件)最好(更快/最少开销)。这是我使用的方法:

/**
 * Sends a broadcast to have the media scanner scan a file
 * 
 * @param path
 *            the file to scan
 */
private void scanMedia(String path) {
    File file = new File(path);
    Uri uri = Uri.fromFile(file);
    Intent scanFileIntent = new Intent(
            Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
    sendBroadcast(scanFileIntent);
}

当需要在多个文件上运行时(例如初始化具有多个图像的应用程序时),我在初始化时保留新图像文件名的集合,然后为每个新图像文件运行上述方法。在下面的代码中,addToScanList将要扫描的文件添加到ArrayList<T>scanMediaFiles用于启动对阵列中每个文件的扫描。

private ArrayList<String> mFilesToScan;

/**
 * Adds to the list of paths to scan when a media scan is started.
 * 
 * @see {@link #scanMediaFiles()}
 * @param path
 */
private void addToScanList(String path) {
    if (mFilesToScan == null)
        mFilesToScan = new ArrayList<String>();
    mFilesToScan.add(path);
}

/**
 * Initiates a media scan of each of the files added to the scan list.
 * 
 * @see {@see #addToScanList(String)}
 */
private void scanMediaFiles() {
    if ((mFilesToScan != null) && (!mFilesToScan.isEmpty())) {
        for (String path : mFilesToScan) {
            scanMedia(path);
        }
        mFilesToScan.clear();
    } else {
        Log.e(TAG, "Media scan requested when nothing to scan");
    }
}