需要做一个图片视屏音频选择器,废话不多说上代码:
/**
* 获取图片
*/
public class ImageLoader extends LoaderM implements LoaderManager.LoaderCallbacks {
String[] IMAGE_PROJECTION = {
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_ADDED,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media._ID};
Context mContext;
DataCallback mLoader;
public ImageLoader(Context context, DataCallback loader) {
this.mContext = context;
this.mLoader = loader;
}
@Override
public Loader onCreateLoader(int picker_type, Bundle bundle) {
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
CursorLoader cursorLoader = new CursorLoader(
mContext,
queryUri,
IMAGE_PROJECTION,
null,
null, // Selection args (none).
MediaStore.Images.Media.DATE_ADDED + " DESC" // Sort order.
);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader loader, Object o) {
try {
ArrayList<Folder> folders = new ArrayList<>();
Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_image));
folders.add(allFolder);
Cursor cursor = (Cursor) o;
while (cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME));
long dateTime = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_ADDED));
int mediaType = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.MIME_TYPE));
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE));
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
if (size < 1) continue;
if (path == null || path.equals("")) continue;
String dirName = getParent(path);
Media media = new Media(path, name, dateTime, mediaType, size, id, dirName);
allFolder.addMedias(media);
int index = hasDir(folders, dirName);
if (index != -1) {
folders.get(index).addMedias(media);
} else {
Folder folder = new Folder(dirName);
folder.addMedias(media);
folders.add(folder);
}
}
mLoader.onData(folders);
cursor.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onLoaderReset(Loader loader) {
}
}
/**
* 获取视屏
*/
public class VideoLoader extends LoaderM implements LoaderManager.LoaderCallbacks {
String[] MEDIA_PROJECTION = {
MediaStore.Files.FileColumns.DATA,
MediaStore.Files.FileColumns.DISPLAY_NAME,
MediaStore.Files.FileColumns.DATE_ADDED,
MediaStore.Files.FileColumns.MEDIA_TYPE,
MediaStore.Files.FileColumns.SIZE,
MediaStore.Files.FileColumns._ID,
MediaStore.Files.FileColumns.PARENT};
Context mContext;
DataCallback mLoader;
public VideoLoader(Context context, DataCallback loader) {
this.mContext = context;
this.mLoader = loader;
}
@Override
public Loader onCreateLoader(int picker_type, Bundle bundle) {
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
Uri queryUri = MediaStore.Files.getContentUri("external");
CursorLoader cursorLoader = new CursorLoader(
mContext,
queryUri,
MEDIA_PROJECTION,
selection,
null, // Selection args (none).
MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order.
);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader loader, Object o) {
try {
ArrayList<Folder> folders = new ArrayList<>();
Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_video));
folders.add(allFolder);
Cursor cursor = (Cursor) o;
Log.e("dmc", cursor.getCount() + "数量数量");
while (cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA));
String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME));
long dateTime = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_ADDED));
int mediaType = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MEDIA_TYPE));
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE));
int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID));
if (size < 1) continue;
if (path == null || path.equals("")) continue;
String dirName = getParent(path);
Media media = new Media(path, name, dateTime, mediaType, size, id, dirName);
allFolder.addMedias(media);
int index = hasDir(folders, dirName);
if (index != -1) {
folders.get(index).addMedias(media);
} else {
Folder folder = new Folder(dirName);
folder.addMedias(media);
folders.add(folder);
}
}
mLoader.onData(folders);
cursor.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onLoaderReset(Loader loader) {
}
}
/** * 获取媒体文件 */ public class MediaLoader extends LoaderM implements LoaderManager.LoaderCallbacks { String[] MEDIA_PROJECTION = { MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.DISPLAY_NAME, MediaStore.Files.FileColumns.DATE_ADDED, MediaStore.Files.FileColumns.MEDIA_TYPE, MediaStore.Files.FileColumns.SIZE, MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.PARENT}; Context mContext; DataCallback mLoader; public MediaLoader(Context context, DataCallback loader) { this.mContext = context; this.mLoader = loader; } @Override public Loader onCreateLoader(int picker_type, Bundle bundle) { String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + " OR " + MediaStore.Files.FileColumns.MEDIA_TYPE + "=" + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO; Uri queryUri = MediaStore.Files.getContentUri("external"); CursorLoader cursorLoader = new CursorLoader( mContext, queryUri, MEDIA_PROJECTION, selection, null, // Selection args (none). MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order. ); return cursorLoader; } @Override public void onLoadFinished(Loader loader, Object o) { try { ArrayList<Folder> folders = new ArrayList<>(); Folder allFolder = new Folder(mContext.getResources().getString(R.string.all_dir_name)); folders.add(allFolder); Folder allVideoDir = new Folder(mContext.getResources().getString(R.string.video_dir_name)); folders.add(allVideoDir); Cursor cursor = (Cursor) o; while (cursor.moveToNext()) { String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA)); String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME)); long dateTime = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_ADDED)); int mediaType = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MEDIA_TYPE)); long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE)); int id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID)); if (size < 1) continue; if(path == null || path.equals("")) continue; String dirName = getParent(path); Media media = new Media(path, name, dateTime, mediaType, size, id, dirName); allFolder.addMedias(media); if (mediaType == 3) { allVideoDir.addMedias(media); } int index = hasDir(folders, dirName); if (index != -1) { folders.get(index).addMedias(media); } else { Folder folder = new Folder(dirName); folder.addMedias(media); folders.add(folder); } } mLoader.onData(folders); cursor.close(); } catch (Exception e) { e.printStackTrace(); } } @Override public void onLoaderReset(Loader loader) { } }