如何在android中运行媒体扫描仪

Posted

技术标签:

【中文标题】如何在android中运行媒体扫描仪【英文标题】:how to run media scanner in android 【发布时间】:2012-10-27 13:43:52 【问题描述】:

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

谁能指导我如何以正确的方式运行媒体扫描仪。

【问题讨论】:

【参考方案1】:

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

/**
 * 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");
    

【讨论】:

谢谢,我希望这对我有很多帮助,我将尝试使用此代码。 对此非常好 +1,我会使用它并提供反馈,我将与音乐文件和播放列表一起使用 我使用的是完全相同的代码,但问题仍然存在。空白图像存储在照片应用程序中。上面的代码没有错误或警告,它执行得很好。但问题仍然存在。

以上是关于如何在android中运行媒体扫描仪的主要内容,如果未能解决你的问题,请参考以下文章

用于 Android Q 上的辅助存储的媒体扫描仪

如何在 android 库中创建应用程序特定文件夹?

扫描 Android SD 卡以获取新文件

Android如何通知MediaScanner扫描出指定文件

android 使用媒体扫描仪扫描 SD 卡

防止媒体扫描,设置权限或锁定android中的文件夹和文件