一:需要含权限的, 要在调用方法前,获取权限完毕(即获取权限成功后,在调用下面的方法)
下载地址:compile 'com.jxdt.media.manager:media:3.0.2'
开启日志 MediaLog.setIsDebug(true);//默认不开启(Log.e)
二:图片展示回调
class OnImageListener implements OnImageLoaderListener {
@Override
public void onImageLoading(Context context, String path, ImageView imageView) {
//展示的 图片
//可以选择使用 Glide
}
@Override
public boolean onImageDelete(Context context, MediaEntity imageEntity) {
//返回 true 表示删除图片 false 不删除图片
//在主线程里执行的
return true;
}
}
三:内置的媒体对象 MediaEntity
//文件夹id
public String folderId;
//文件夹名字
public String folderName;
//文件夹路径
public String folderPath;
//文件路径
public String filePathSource;
//文件创建时间
public long fileTime;
//文件id
public String fileId;
//文件类型(png,jpg,mp4....)
public String mediaType;
//文件类 1 图片 2 视频
public int fileType;
//文件大小
public String fileSize;
//文件名称
public String imageName;
// 经度
public int imageAngle;
//视频时长(毫秒)
public String videoLength;
//视频标题
public String videoTitle;
//视频缩略图
public String videoThumbnails;
//裁剪或者压缩的图片路径
public String filePath;
//false 不可以删除 (默认为true)
public boolean isDelete = true;
四:图片操作
//选择更多图片 max 最多选择图片的数量 path 已选择的图片(已选择的图片会 选择列表回显)
public void getMoreConfig(int max, ArrayList<String> path) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataImageOption()
.setMaxCount(max)
.setOptionPaths(path)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_OPTION_REQ);
}
//选择更多图片
public void getMoreConfig(int max, ArrayList<MediaEntity> path) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataImageOption()
.setMaxCount(max)
.setOptions(path)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_OPTION_REQ);
}
//设置预览(只显示图片)path 图片url,index 从第几张图片开始
public void setImagePreview(ArrayList<String> path, int index) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataImageOption()
.setOptionPaths(path)
.setImageIndex(index)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_PRIVATE);
}
//预览图片 可以 删除
public void setImagePreviewDel(ArrayList<String> path, int index) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataImageOption()
.setOptionPaths(path)
.setImageIndex(index)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_PRIVATE_DEL_REQ);
}
//选择图片并且 裁剪图
public void getImageCrop() {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataCrop()
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_OPTION_CROP_IN_REQ);
}
//系统相机拍照
public void getSysImage() {
Context con = activity.getApplicationContext();
String pck = con.getPackageName();
DataConfig.getNewBuild()
.setAuthority(pck)
.setOnImageLoaderListener(new OnImageListener())
.onDataTake()
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_TAKE_OUT_REQ);
}
//系统裁剪 path 一张图片
public void getSysImageCrop(String path) {
Context con = activity.getApplicationContext();
String pck = con.getPackageName();
DataConfig.getNewBuild()
.setAuthority(pck)
.setOnImageLoaderListener(new OnImageListener())
.onDataCrop()
.setImagePath(path)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_CROP_OUT);
}
//裁剪 path 一张图片
public void getImageCrop(String path) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataCrop()
.setImagePath(path)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_CROP_IN_REQ);
}
五:视频
//系统录制视频
public void getSysVideo() {
Context con = activity.getApplicationContext();
String pck = con.getPackageName();
DataConfig.getNewBuild()
.setAuthority(pck)
.onDataTake()
.onSetDataComplete()
.build(activity, DataConfig.TASK_VIDEO_TAKE_OUT_REQ);
}
//相机预览
public void onCameraPreview() {
DataConfig.getNewBuild()
.build(activity, DataConfig.TASK_CAMERA_PREVIEW);
}
setGainType(false, true) 视频选择
setGainType(true, true)图片和视频选择(默认)
setGainType(true, false) 视频图片
//选择更多视频
public void getVideoMoreConfig(int max) {
DataConfig.getNewBuild()
.setOnImageLoaderListener(new OnImageListener())
.onDataImageOption()
.setMaxCount(max)
.setGainType(false, true)
.onSetDataComplete()
.build(activity, DataConfig.TASK_IMAGE_OPTION_REQ);
}
六:录制语音(amr)使用MediaRecorder录制
//设置回调
MediaRecorderManager.getInstance().setOnRecorderListener(onMediaRecorder);
//设置储存路径
MediaRecorderManager.getInstance().setAudioOutput(getVoicePath());
//设置最大录制时长(妙)
MediaRecorderManager.getInstance().setRecordTotalTime(10);
//开始录制
MediaRecorderManager.getInstance().setMediaVoiceStart();
//录制暂停
MediaRecorderManager.getInstance().stopMedia();
//录制继续
MediaRecorderManager.getInstance().setMediaResume();
//录制停止
MediaRecorderManager.getInstance().setMediaStop();
//获取录制存储地址(如果有暂停 8.0 以下要调用此方法)
String path=MediaRecorderManager.getInstance().getAudioPath();
录制监听
class OnMediaRecorder implements MediaRecorderManager.OnMediaRecorderListener {
@Override
public void onRecorderState(int state, long progressTime) {
MediaLog.e("录制开始");
}
@Override
public void onRecorderTime(long recordTotalTime, long progressTime) {
MediaLog.e("录制中..." + progressTime + "/" + recordTotalTime);
}
@Override
public void onVoiceAmplitude(double maxAmplitude) {
MediaLog.e("录制声音获取=" + maxAmplitude);
}
@Override
public void onRecorderTimeOut(long recordTotalTime, long progressTime) {
MediaLog.e("录制声音超时");
}
}
录制的语音播放 使用MediaPlayer播放
//播放监听
MediaPlayerManager.getInstance().setOnMediaListener(onMediaPlayer);
//播放初始化
MediaPlayerManager.getInstance().onMediaPlayerInit();
//设置播放源并且播放""网络音频,path 本地储存音频
MediaPlayerManager.getInstance().setDataSourcePlay("", path);
播放监听
class OnMediaPlayer implements MediaPlayerManager.OnMediaPlayerListener {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
/**
* @param mp
* @param state 100:准备完成(开始播放)
* 101:播放暂停
* 102:播放完成
* 103:停止播放
* 104:播放进度
* 105:开始缓冲
* 106:缓冲结束
* @param source 播放的url
*/
@Override
public void onPayState(MediaPlayer mp, int state, String source) {
}
@Override
public void onError(MediaPlayer mp, int what, int extra) {
}
}
七:选择图片,截图,视频数据的回调 在onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
boolean isOk = photoManager.onActivityResult(requestCode, resultCode, data);
if (!isOk) {
return;
}
}
public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
boolean isOk = false;
ArrayList<MediaEntity> imageRes = new ArrayList();
switch (resultCode) {
case DataConfig.TASK_IMAGE_PRIVATE_DEL_REQ:
//预览删除
Bundle bundle = data.getExtras();
imageRes = (ArrayList<MediaEntity>) bundle.get(DataConfig.TASK_DATA_RESULT);
if (imageRes == null) {
imageRes = new ArrayList();
}
isOk = true;
break;
case DataConfig.TASK_IMAGE_OPTION_COMPLETE_RES:
//选择图片,视频完成
bundle = data.getExtras();
imageRes = (ArrayList<MediaEntity>) bundle.get(DataConfig.TASK_DATA_RESULT);
if (imageRes == null) {
imageRes = new ArrayList();
}
isOk = true;
break;
case DataConfig.TASK_IMAGE_CROP_COMPLETE_RES:
//应用内裁剪完成
String imagePath = data.getStringExtra("arg0");
MediaEntity img = new MediaEntity();
img.filePathSource = imagePath;
imageRes.add(img);
isOk = true;
break;
}
if (isOk) {
DataConfig.onConfiReset();
return true;
}
switch (requestCode) {
case DataConfig.TASK_IMAGE_CROP_COMPLETE_OUT_REQ:
//系统裁剪完成
if (resultCode != Activity.RESULT_OK) {
//裁剪放弃
break;
}
String imagePath = DataConfig.getBuild().getDataCrop().getSysImagePath();
MediaEntity img = new MediaEntity();
img.filePathSource = imagePath;
imageRes.add(img);
isOk = true;
break;
case DataConfig.TASK_IMAGE_TAKE_OUT_REQ:
//系统拍照
if (resultCode != Activity.RESULT_OK) {
//系统拍照放弃
break;
}
imagePath = DataConfig.getBuild().getDataTake().getSysImagePath();
img = new MediaEntity();
img.filePathSource = imagePath;
imageRes.add(img);
isOk = true;
break;
case DataConfig.TASK_VIDEO_TAKE_OUT_REQ:
//系统录制视频
if (resultCode != Activity.RESULT_OK) {
//系统录制视频放弃
break;
}
String videoPath = DataConfig.getBuild().getDataTake().getSysVideoPath();
img = new MediaEntity();
img.filePathSource = videoPath;
imageRes.add(img);
isOk = true;
break;
}
DataConfig.onConfiReset();
return isOk;
}