[Android] 安卓开发之在Android Q或其他版本中快速调用相机相册操作

本文讲述在安卓高版本例如安卓Q中 快速调用系统相机或相册进行图片操作的过程
需要用到的库:https://github.com/songlongGithub/uTakePhoto,欢迎大家给原作者一个star
在安卓高版本中,关于调用相机相册使用图片的操作越来越复杂了,而这个库可以自动适配权限与调用、裁剪、压缩等等操作
首先在你的build.gradle(moudle:app的那个)中添加依赖dependencies:

implementation 'com.sl.utakephoto:uTakePhoto:1.1.0'

之后sync一下,就直接可以用了(ide会提示你import东西)
示例:

    /**
     * 创建一条图片地址uri,用于保存拍照后的照片
     *
     * @param context
     * @return 图片的uri
     */
    @RequiresApi(api = Build.VERSION_CODES.N)
    private static Uri createImagePathUri(Context context) {
        Uri imageFilePath = null;
        String status = Environment.getExternalStorageState();
        SimpleDateFormat timeFormatter = new SimpleDateFormat(
                "yyyyMMdd_HHmmss", Locale.CHINA);
        long time = System.currentTimeMillis();
        String imageName = timeFormatter.format(new Date(time));
        // ContentValues是我们希望这条记录被创建时包含的数据信息
        ContentValues values = new ContentValues(3);
        values.put(MediaStore.Images.Media.DISPLAY_NAME, imageName);
        values.put(MediaStore.Images.Media.DATE_TAKEN, time);
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
        if (status.equals(Environment.MEDIA_MOUNTED)) {// 判断是否有SD卡,优先使用SD卡存储,当没有SD卡时使用手机存储
            imageFilePath = context.getContentResolver().insert(
                    MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } else {
            imageFilePath = context.getContentResolver().insert(
                    MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
        }
        Log.i("", "生成的照片输出路径:" + imageFilePath.toString());
        return imageFilePath;
    }
    /**
    *下面是调用相机相册操作
    */
                final Uri uri = createImagePathUri(getContext());
                UTakePhoto.with(Objects.requireNonNull(getActivity()))
                        .openCamera()
                        //.openAlbum()为调用相册
                        .setCrop(new CropOptions.Builder().create())
                        .setCompressConfig(new CompressConfig.Builder().setTargetUri(uri).create())
                        .build(new ITakePhotoResult() {
                            @Override
                            public void takeSuccess(List<Uri> uriList) {
                            //调用成功后
                                Toast.makeText(getActivity(),"success",Toast.LENGTH_SHORT).show();
                                imv.setImageURI(uri);
                            }

                            @Override
                            public void takeFailure(TakeException ex) {
                            //失败
                                Toast.makeText(getActivity(),"未获取到图片",Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void takeCancel() {
                                Toast.makeText(getActivity(),"您取消了操作",Toast.LENGTH_SHORT).show();
                            }
                        });

更多用法请参见原作者的github项目

你可能感兴趣的:([Android] 安卓开发之在Android Q或其他版本中快速调用相机相册操作)