我们通过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();
}
}