Android调用系统相机拍照

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;
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值