Как запустить медиа-сканер в Android
Я новичок в Android. Я хочу запустить медиа-сканер во время захвата изображения. После захвата изображения оно обновляется в виде сетки. Для этого мне нужно запустить медиа-сканер. Я нашел два решения для запуска медиа-сканера: одно - широковещательное событие, а другое - класс медиа- сканера. Я думаю, что в 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");
}
}