整体思路:把图片选择的逻辑封装到一个透明Activity(ImageSelectProxyActivity),减少宿主页面逻辑。
使用(两步走):
1.启动相册、拍照的弹窗:
场景一:类似于发朋友圈上传图片:不涉及裁剪图片
ImageSelectProxyActivity.selectImage(ImageActivity.this, UsageTypeConstant.OTHER, 9);
场景二:更换头像:裁剪图片
ImageSelectProxyActivity.selectImage(ImageActivity.this, UsageTypeConstant.HEAD_PORTRAIT, 1);
2.接收数据:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (RESULT_OK == resultCode) {
if (requestCode == ImageConstant.REQUEST_CODE_IAMGES) {
ArrayList<String> list = (ArrayList<String>) data.getSerializableExtra(ImageConstant.SELECTED_IAMGES);
//场景一:发朋友圈上传、评论等上传 这里不裁剪
if (mType.equals(UsageTypeConstant.OTHER)) {
mImagesAdapter.updateDataFromAlbum(list);
}
if (mType.equals(UsageTypeConstant.HEAD_PORTRAIT)) {
//场景二:头像等上传 有裁剪操作
if (list != null && list.size() > 0) {
GlideApp.with(this).load(list.get(0)).circleCrop().into(mIv_logo);
}
}
}
}
}
截图如下
1.选择相册和拍照是分开的;
2选择相册通过通过contentResolver查询系统数据库获取图片的uri
拍照适配最新的7.0和8.0,不同版本区分直接的uri和封装后的uri(fileProvider);