之前在写项目框架Andoroid 6.0,动态获取权限的时候就提到过TakePhoto开源框架
简介
一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库
依赖
1 | implementation 'com.jph.takephoto:takephoto_library:4.0.3' |
用法
我这里就说拍照,选择相册的功能。其他功能请移步TakePhoto开源框架看说明文档,写的很清楚。最后会给出一个工具类,拷贝过去就可以直接用。
- 定义两个变量
1 | private TakePhoto takePhoto; |
- 添加如下代码获取TakePhoto实例
1 | public TakePhoto getTakePhoto(){ |
- 实现两个接口:TakePhoto.TakeResultListener,InvokeListener
- 在 onCreate,onActivityResult,onSaveInstanceState方法中调用TakePhoto对用的方法
1 | @Override |
- 重写TPermissionType invoke(InvokeParam invokeParam)方法,添加如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//以下代码为处理Android6.0、7.0动态权限所需
PermissionManager.TPermissionType type=PermissionManager.onRequestPermissionsResult(requestCode,permissions,grantResults);
PermissionManager.handlePermissionsResult(this,type,invokeParam,this);
}
@Override
public PermissionManager.TPermissionType invoke(InvokeParam invokeParam) {
PermissionManager.TPermissionType type=PermissionManager.checkPermission(TContextWrap.of(this),invokeParam.getMethod());
if(PermissionManager.TPermissionType.WAIT.equals(type)){
this.invokeParam=invokeParam;
}
return type;
}
到这里,根据他官方的介绍就已经全部写完了,然后怎么分调用相机,相册还是文件夹呢?
- 调用不同的方法,常用的:相机,相册,多选
1 | flag = getIntent().getIntExtra("flag", 0); |
前面一个页面调用startActivityForResult,传一个标记过来,用来判断调用不同的方式。
我这里还想多说的是,一般我们这个拍照功能,都有三个选项,拍照,相册,取消,从底部弹出。这个我估计还是大部分人写的动画实现的。我想说的是BottomSheetDialog,这个是MD推出的一个控件,现在微信用的就是这个,用起来也非常方便,简单。
至于,工具类,直接下载项目,把对应的TakePhotoActivity文件拷贝过去就可以了。