1.设置路径,调用拍照,并指定路径
public void test(){
placePhotoPath = ContantsUtils.FilePath.PlacePhoto + UUIDUtil.getUUID() + ".jpg";
File file = new File(ContantsUtils.FilePath.PlacePhoto);
if (!file.exists()) {
file.mkdirs();
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//请注意此处位置,getUriForFile的第二个参数为new File(placePhotoPath),这个path是你定义的指定存储路径
// 与前面的file不同,前者是判断文件夹是否存在
intent.putExtra(MediaStore.EXTRA_OUTPUT, getUriForFile(mContext, new File(placePhotoPath)));
startActivityForResult(intent, ContantsUtils.RequestCode.BuildPlacePhoto);
}
2.获取URI,兼容版本
public static Uri getUriForFile(Context context, File file) {
if (context == null || file == null) {
throw new NullPointerException();
}
Uri uri;
if (Build.VERSION.SDK_INT >= 24) {
uri = FileProvider.getUriForFile(context, "packagename.provider", file);
} else {
uri = Uri.fromFile(file);
}
return uri;
}
3.回调获取图片
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case 502:
try {
Luban.with(mContext)
.load(placePhotoPath)
.ignoreBy(100)
.setTargetDir(ContantsUtils.FilePath.PlacePhoto)
.filter(new CompressionPredicate() {
@Override
public boolean apply(String path) {
return !(TextUtils.isEmpty(path) || path.toLowerCase().endsWith(".gif"));
}
})
.setCompressListener(new OnCompressListener() {
@Override
public void onStart() {
KLog.e("TODO 压缩开始前调用,可以在方法内启动 loading UI");
}
@Override
public void onSuccess(File file) {
if (null != file && file.exists()) {
KLog.e("TODO 压缩成功后调用,返回压缩后的图片文件: " + file.getAbsolutePath());
String compressPlacePhotoPath = file.getAbsolutePath();
}
}
@Override
public void onError(Throwable e) {
KLog.e("TODO 当压缩过程出现问题时调用: " + e.getMessage());
MyToast.showLongToast("压缩异常: " + e.getMessage());
}
}).launch();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}