EMedia 让相册、拍照、视频.、预览更方便
EMedia是一个基于Android系统的媒体文件选择帮助类。
其中主要的功能有
new EPickerBuilder(this)
.setPickerType(EPickerBuilder.PickerType.PHOTO_VIDEO) //选择的内容支持:图片 视频 图片和视频
.setMaxChoseNum(9) //最大选择数
.setFilterPhotoMaxSize(10) //图片文件的大小限制
.setProgressDialogClass(ProgressDialog.class) //压缩时,自定义Progress样式
.openCompress(true, cacheDirPathCompress) //压缩文件的输出文件地址
.overSizeVisible(true) //超过大小的文件是否课件
.setOpenPreview(true) //是否可以预览
.setOpenSkipMemoryCache(true) //是否跳过内存缓存
.setOpenBottomMoreOperate(true) //是否开启按文件夹显示集合
.setPreviewActivity(null) //支持自定义预览Activity
.startPicker();
其他更多功能可以参考: EPickerBuilder
实现效果
注:Titlebar和主题颜色演示可以自定义的。
拍照部分封装了调用系统拍照:
filePath = IntentUtil.makePhoto(this, cacheDirPathImage);
filePath = IntentUtil.makeVideo(this, cacheDirPathVideos);
请求参数和返回内容和拍照一样。
目前自定义录像支持:闪光灯、分辨率、翻转摄像头、最小录制时间、最长录制时间、防抖、录像后预览等功能。
启动样例:
new ERecordBuilder(MainActivity.this)
.setRecordMinTime(3)
.setLimitTime(0)
.setQuality(ERecordBuilder.RecordQuality.ALL)
.setShowLight(true)
.setShowRatio(true)
.setPreOnClickListener(RecordPreOnClickListener.class)
.startRecord(cacheDirPathVideos);
更多功能可以参考:ERecordBuilder
IntentUtil.openFileManager(this);
请求时,内置了默认的请求码,当然也可以自定义请求码,构造器会保存,所以onActivityResult可以通过构造器getRequestCode()方法来区分返回类型。
其中相册返回的是列表,如果单选时,列表中只有一个元素。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e(TAG, " requestCode=" + requestCode + " resultCode=" + resultCode + " data is null=" + (data == null));
if (resultCode == RESULT_CANCELED) {
return;
}
File temp;
if (requestCode == EPickerBuilder.getRequestCode()) {
List<MediaPickerBean> mediaList = IntentUtil.parserMediaResultData(requestCode, data);
for (int i = 0; i < mediaList.size(); i++) {
Log.e(TAG, mediaList.get(i).getMediaFilePath());
}
} else if (requestCode == IntentUtil.TAKE_PHOTO_REQUEST_CODE) {
temp = IntentUtil.parserTakedPhoto(this, true);
if (temp != null) {
Log.e(TAG, temp.exists() ? "Image take success,file path:" + temp.getAbsolutePath() : "Image file not exist!");
PicUtils.readPictureDegree(temp.getAbsolutePath());
}
} else if (requestCode == IntentUtil.TAKE_VIDEO_REQUEST_CODE) {
temp = IntentUtil.parserTakedVideo(this, true);
if (temp != null)
Log.e(TAG, temp.exists() ? "Video record success,file path is:" + temp.getAbsolutePath() : "Video file not exist!");
} else if (requestCode == ERecordBuilder.getRequestCode()) {
temp = IntentUtil.parserCustomTakedVideo(this, data, true);
if (temp != null)
Log.e(TAG, temp.exists() ? "Custom video record success,file path is:" + temp.getAbsolutePath() : "Custom video file not exist!");
} else if (requestCode == IntentUtil.getTakeFileRequestCode()) {
if (FileChooseUtil.isDownloadsDocument(data.getData())) {
Toast.makeText(this, "无效文件", Toast.LENGTH_SHORT).show();
} else {
Log.e(TAG, " Authority = " + data.getData().getAuthority());
String filePath = FileChooseUtil.getPathFromUri(this, data.getData());
Log.e(TAG, filePath + " Authority=" + data.getData().getAuthority());
}
}
}