最近发现以前项目中的用户头像功能在小米9中拍照和获取相册图片有问题,刚好项目中用的图片框架是Rxgalleryfinal,就研究了使用Rxgalleryfinal进行图片选择和拍照来实现该功能,后测试可用
cn.finalteam.rxgalleryfinal:library:1.1.3
github:https://github.com/FinalTeam/RxGalleryFinal
根据github下载的demo查看,基本写的比较详细,所以这里也不细说,github里面写了支持在activity中拍照和相册的裁剪,Fragment需要自己实现,比较简单
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import com.yalantis.ucrop.UCrop;
import java.io.File;
import java.io.FileNotFoundException;
/**
* by y on 17/07/2017.
* <p>
* 使用相机拍照并裁剪
*/
public class SimpleRxGalleryFinal {
private static final String IMAGE_TYPE = "image/jpeg";
private static final int TYPE_CAMERA = 1111;
private RxGalleryFinalCropListener listener = null;
private RxGalleryFinalCropFragmentListener listenerFragment = null;
private Uri imagePath;
private String flag;
private static final class SimpleRxGalleryFinalHolder {
private static final SimpleRxGalleryFinal SIMPLE_RX_GALLERY_FINAL = new SimpleRxGalleryFinal();
}
public static SimpleRxGalleryFinal get() {
return SimpleRxGalleryFinalHolder.SIMPLE_RX_GALLERY_FINAL;
}
public SimpleRxGalleryFinal init(RxGalleryFinalCropListener listener) {
flag = "activity";
this.listener = listener;
return this;
}
public SimpleRxGalleryFinal init(RxGalleryFinalCropFragmentListener listenerFragment) {
flag = "fragment";
this.listenerFragment = listenerFragment;
return this;
}
/**Activity调用该方法**/
public void openCamera() {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imagePath = Uri.fromFile(getDiskCacheDir());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
intent.putExtra(MediaStore.EXTRA_OUTPUT, imagePath);
} else {
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, imagePath.getPath());
contentValues.put(MediaStore.Images.Media.MIME_TYPE, IMAGE_TYPE);
Uri uri = listener.getSimpleActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
}
listener
.getSimpleActivity()
.startActivityForResult(intent, TYPE_CAMERA);
}
/**Fragement调用该方法**/
public void openFragment