手把手教你:android调用系统相机、相册功能,适配6.0权限获取以及7.0以后获取URI(兼容多版本)

本文介绍了如何在Android中调用系统相机和相册功能,特别是在Android 7.0及以上版本如何处理FileUriExposedException异常。通过使用FileProvider和权限适配,确保在不同版本的Android系统上正常运行。同时,文章还涵盖了从相册选择图片并显示的流程。
摘要由CSDN通过智能技术生成

  Android中调用系统相机来拍摄照片的代码,如下:

1、首先设置Uri获取判断以及相机请求Code

  public final int TYPE_TAKE_PHOTO = 1;//Uri获取类型判断

  public final int CODE_TAKE_PHOTO = 1;//相机RequestCode

 2、调起系统相机

 Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 Uri photoUri = getMediaFileUri(TYPE_TAKE_PHOTO);
 takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
 startActivityForResult(takeIntent, CODE_TAKE_PHOTO);
3、封装获取Uri代码

    public Uri getMediaFileUri(int type){
        File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "相册名字");
        if (!mediaStorageDir.exists()) {
            if (!mediaStorageDir.mkdirs()) {
                return null;
            }
        }
        //创建Media File
        String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        File mediaFile;
        if (type == TYPE_TAKE_PHOTO) {
            mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg");
        } else {
            return null;
        }
        return Uri.fromFile(mediaFile);
    }

4、相机拍照完毕后获取返回数据,并在页面显示照片

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
            case CODE_TAKE_PHOTO:
                if (resultCode == RESULT_OK) {
                    if (data != null) {
                        if (data.hasExtra("data")) {
                            Log.i("URI", "data is not null");
                            Bitmap bitmap = data.getParcelableExtra("data");
                            imageView.setImageBitmap(bitmap);//imageView即为当前页面需要展示照片的控件,可替换
                        }
                    } else {
                        Log.i("URI", "Data is null");
                        Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath());
                        imageView.setImageBitmap(bitmap);//imageView即为当前页面需要展示照片的控件,可替换
                    }
                }
                break;
        }
    
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值