package cn.bingoogolapple.media.engine; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import java.io.File; import java.util.ArrayList; import java.util.List; import cn.bingoogolapple.media.App; import cn.bingoogolapple.media.model.MediaFile; /** * 作者:王浩 邮件:bingoogolapple@gmail.com * 创建时间:15/9/7 下午11:00 * 描述: */ public class MediaScanner { private static String AUDIO_PATH = MediaStore.Audio.AudioColumns.DATA; // private static String AUDIO_TITLE = MediaStore.Audio.AudioColumns.TITLE; private static String AUDIO_TITLE = MediaStore.Audio.AudioColumns.DISPLAY_NAME; private static String AUDIO_SIZE = MediaStore.Audio.AudioColumns.SIZE; private static String AUDIO_DURATION = MediaStore.Audio.AudioColumns.DURATION; private static String AUDIO_ARTIST = MediaStore.Audio.AudioColumns.ARTIST; private static String AUDIO_PROJECTION[] = {AUDIO_PATH, AUDIO_TITLE, AUDIO_SIZE, AUDIO_DURATION, AUDIO_ARTIST}; private static String VIDEO_PATH = MediaStore.Video.VideoColumns.DATA; // private static String VIDEO_TITLE = MediaStore.Video.VideoColumns.TITLE; private static String VIDEO_TITLE = MediaStore.Video.VideoColumns.DISPLAY_NAME; private static String VIDEO_SIZE = MediaStore.Video.VideoColumns.SIZE; private static String VIDEO_DURATION = MediaStore.Video.VideoColumns.DURATION; private static String VIDEO_PROJECTION[] = {VIDEO_PATH, VIDEO_TITLE, VIDEO_SIZE, VIDEO_DURATION}; public static void scanFolder(String filePath) { File inputFile = new File(filePath); if (inputFile.isDirectory()) { File[] files = inputFile.listFiles(); for (int i = 0; i < files.length; i++) { File file = files[i]; if (file.isFile()) { scanFile(file.getAbsolutePath()); } else { scanFolder(file.getAbsolutePath()); } } } else { scanFile(filePath); } } public static void scanFile(String filePath) { App.getInstance().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + filePath))); } public static List<MediaFile> scanAudio() { return scanMedia(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, AUDIO_PROJECTION, AUDIO_TITLE, AUDIO_TITLE, AUDIO_PATH, AUDIO_SIZE, AUDIO_DURATION, AUDIO_ARTIST); } public static List<MediaFile> scanVideo() { return scanMedia(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, VIDEO_PROJECTION, VIDEO_TITLE, VIDEO_TITLE, VIDEO_PATH, VIDEO_SIZE, VIDEO_DURATION, null); } public static List<MediaFile> scanMedia(Uri uri, String[] projection, String sortOrder, String nameColumn, String pathColumn, String sizeColumn, String durationColumn, String artistColumn) { List<MediaFile> results = new ArrayList<>(); Cursor cursor = App.getInstance().getContentResolver().query(uri, projection, null, null, sortOrder); if (cursor != null) { if (cursor.getCount() > 0) { MediaFile mediaFile; while (cursor.moveToNext()) { mediaFile = new MediaFile(); mediaFile.name = cursor.getString(cursor.getColumnIndex(nameColumn)); mediaFile.path = cursor.getString(cursor.getColumnIndex(pathColumn)); mediaFile.duration = cursor.getInt(cursor.getColumnIndex(durationColumn)); mediaFile.size = cursor.getInt(cursor.getColumnIndex(sizeColumn)); if (artistColumn != null) { mediaFile.artist = cursor.getString(cursor.getColumnIndex(artistColumn)); } results.add(mediaFile); } } cursor.close(); } return results; } }