我想运行媒体扫描仪同时拍摄图像。 拍摄后,图像是在网格视图更新。 为此,我需要运行媒体扫描仪。 我发现了两个解决方案,运行媒体扫描一个是广播事件,另一种是运行媒体扫描仪类。 我认为,在冰淇淋三明治(4.0)媒体扫描器类是introduced.Before版本需要运行媒体扫描仪设置广播事件。
任何一个可以指导我如何运行正道媒体扫描仪。
我想运行媒体扫描仪同时拍摄图像。 拍摄后,图像是在网格视图更新。 为此,我需要运行媒体扫描仪。 我发现了两个解决方案,运行媒体扫描一个是广播事件,另一种是运行媒体扫描仪类。 我认为,在冰淇淋三明治(4.0)媒体扫描器类是introduced.Before版本需要运行媒体扫描仪设置广播事件。
任何一个可以指导我如何运行正道媒体扫描仪。
我发现,最好(快/最少开销)来运行特定文件的媒体扫描仪(VS运行它来扫描介质中的所有文件),如果你知道文件名。 下面是我使用的方法:
/**
* 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");
}
}