如何把文件添加到mediaStore

218 阅读1分钟

我们通过mediaStore检索图片或文件时,经常出现有些文件明明在我手机里,但是检索不到的情况,下边的代码在APP启动或其他时机调用,可以扫描外置存储并把文件同步到mediaStore。可以指定路径,也可以全局扫描。

import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.Uri;

import java.io.File;

/**
 * 扫描外置sd卡并把文件添加到mediastore
 */
public class MediaScanner {

  public static void scanFile(Context context, String path) {
    File file = new File(path);
    MediaScannerConnection.scanFile(context, new String[]{file.getAbsolutePath()}, null,
        new MediaScannerConnection.OnScanCompletedListener() {
          @Override
          public void onScanCompleted(String path, Uri uri) {
            // 扫描完成后的回调
          }
        });
  }

  public static void scanDir(Context context, String path) {
    File dir = new File(path);
    File[] files = dir.listFiles();
    if (files != null) {
      for (File file : files) {
        if (file.isDirectory()) {
          scanDir(context, file.getAbsolutePath());
        } else {
          scanFile(context, file.getAbsolutePath());
        }
      }
    }
  }

  public static void scanExternalStorage(Context context) {
    String externalStoragePath = System.getenv("EXTERNAL_STORAGE");
    if (externalStoragePath == null) {
      return;
    }
    scanDir(context, externalStoragePath);
  }

  public static void scanExternalStorageAsync(final Context context) {
    new Thread(new Runnable() {
      @Override
      public void run() {
        scanExternalStorage(context);
      }
    }).start();
  }
}