安卓笔记 7.0后的 图片裁剪和拾取和相机拾取图片和裁剪 适配

 
//打开相册
    private void openAlbum() {
        Intent selectIntent = new Intent(Intent.ACTION_PICK, null);
        selectIntent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
        OnActivityForResultUtils.startActivityForResult(this, Constant.IMAGE_PICKER, selectIntent, new SimpleOnActivityForResultCallback() {
            @Override
            public void success(Integer resultCode, Intent data) {
                Uri selectedImage = data.getData();
                if (selectedImage != null) {
                    ContentResolver cr = mContext.getContentResolver();
                    Cursor cursor = cr.query(selectedImage, null, null, null, null);
                    String imagePath = null;
                    if (cursor == null) {
                        imagePath = selectedImage.getPath();
                    } else {
                        cursor.moveToFirst();
                        imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                    }

                    if (FileUtil.existSDCard()) {
                        cropImageFile = new File(Environment.getExternalStorageDirectory(), "/DCIM/camera/");
                    }else {
                        cropImageFile = Environment.getDataDirectory();
                    }
                    cropImageFile = FileUtil.createFile(cropImageFile, "IMG_", ".jpg");  //裁剪图片的路径
                    startPhotoZoom(new File(imagePath),cropImageFile);
                }
            }
        });
    }

    //打开相机
    public void openCamera() {
        Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File takeImageFile;
        if (FileUtil.existSDCard()) {
            takeImageFile = new File(Environment.getExternalStorageDirectory(), "/DCIM/camera/");
        }else {
            takeImageFile = Environment.getDataDirectory();
        }
        takeImageFile = FileUtil.createFile(takeImageFile, "IMG_", ".jpg");  //拍照图片的路径
        Uri imageUri = null;
        //判断是否是Android7.0以及更高的版本
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            imageUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileProvider", takeImageFile);
            captureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION |Intent.FLAG_GRANT_READ_URI_PERMISSION);
        } else {
            imageUri = Uri.fromFile(takeImageFile);
        }
        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        final File finalTakeImageFile = takeImageFile;
        OnActivityForResultUtils.startActivityForResult(this, Constant.REQUEST_CAPTURE, captureIntent, new SimpleOnActivityForResultCallback() {
            @Override
            public void success(Integer resultCode, Intent data) {
                if (FileUtil.existSDCard()) {
                    cropImageFile = new File(Environment.getExternalStorageDirectory(), "/DCIM/camera/");
                }else {
                    cropImageFile = Environment.getDataDirectory();
                }
                cropImageFile = FileUtil.createFile(cropImageFile, "IMG_", ".jpg");  //裁剪图片的路径
                startPhotoZoom(finalTakeImageFile,cropImageFile);
            }
        });
    }


    /**
     * 裁剪方法
     */
    public void startPhotoZoom(File imageFile,File file) {
        if (!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        Intent intent = new Intent("com.android.camera.action.CROP");
        //添加这一句表示对目标应用临时授权该Uri所代表的文件
        intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION |Intent.FLAG_GRANT_READ_URI_PERMISSION);
        Uri outputUri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
            //7.0 输出uri 后通过FileProvider创建一个content类型的Uri
            outputUri = Uri.fromFile(file); //这里不能用 下面的不然会出现 裁剪的图片不能保存的提示
//            outputUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileProvider", file);
            mContext.grantUriPermission(mContext.getPackageName(), outputUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
            //7.0 后资源uri获取方式
            intent.setDataAndType(getImageContentUri(mContext, imageFile), "image/*");
        } else{
            intent.setDataAndType(Uri.fromFile(imageFile), "image/*");
            outputUri = Uri.fromFile(file);
        }

        intent.putExtra("crop", "true");// crop=true 有这句才能出来最后的裁剪页面.
        intent.putExtra("aspectX", 1);// 这两项为裁剪框的比例.1:1 正方形
        intent.putExtra("aspectY", 1);
        intent.putExtra("outputX", 300);//图片输出大小,可以不需要
        intent.putExtra("outputY", 300);
//        intent.putExtra("circleCrop", true);
        intent.putExtra("noFaceDetection", true);
        intent.putExtra("return-data", false);
        //注意这里的输出的是上面的文件路径的Uri格式,这样在才能获取图片
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputUri);
        intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());// 返回格式
        OnActivityForResultUtils.startActivityForResult(this, Constant.REQUEST_CODE_CROUP_PHOTO, intent, new          SimpleOnActivityForResultCallback() {
            @Override
            public void success(Integer resultCode, Intent data) {
                requestUpHead(cropImageFile);
            }
        });
    }

    //7.0 后资源uri获取方式 (没这个会报错)
    public static Uri getImageContentUri(Context context, File imageFile) {
        String filePath = imageFile.getAbsolutePath();
        Cursor cursor = context.getContentResolver().query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                new String[] { MediaStore.Images.Media._ID },
                MediaStore.Images.Media.DATA + "=? ",
                new String[] { filePath }, null);
        if (cursor != null && cursor.moveToFirst()) {
            int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
            Uri baseUri = Uri.parse("content://media/external/images/media");
            return Uri.withAppendedPath(baseUri, "" + id);
        } else {
            if (imageFile.exists()) {
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.DATA, filePath);
                return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            }else {
                return null;
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值