Подтвердить что ты не робот

Как запустить медиа-сканер в android

Я новичок в android. Я хочу запустить медиа-сканер, захватив изображение. После захвата изображение обновляется в виде сетки. Для этого мне нужно запустить медиа-сканер. Я нашел два решения для запуска медиа-сканера. Это событие широковещательная, а другое - класс работающего носителя. Я думаю, что в Ice Cream Sandwich (4.0) появился медиа-сканер. Перед версиями необходимо установить широковещательное событие для запуска медиаплеера.

может ли кто-нибудь помочь мне правильно запустить медиа-сканер.

4b9b3361

Ответ 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");
    }
}