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

  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;
        }
    
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
调用系统相机拍摄照片后,可以通过以下步骤获取照片的Uri: 1. 在调用相机时,使用`startActivityForResult()`方法启动相机,并传递一个请求码,例如: ``` Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, REQUEST_IMAGE_CAPTURE); ``` 2. 在`onActivityResult()`方法中获取相机返回的数据,包括照片的缩略图和Uri: ``` protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); Uri photoUri = data.getData(); // 处理照片 } } ``` 如果需要直接获取照片的Uri,可以通过以下步骤: ``` protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Uri photoUri = data.getData(); if (photoUri == null) { // 如果返回Uri为null,则通过Intent中的extras获取照片数据,并将其保存到指定路径中 Bitmap imageBitmap = (Bitmap) data.getExtras().get("data"); photoUri = saveImage(imageBitmap); } // 处理照片 } } private Uri saveImage(Bitmap imageBitmap) { // 将照片保存到指定路径,并返回Uri File imageFile = new File(getExternalFilesDir(null), "photo.jpg"); try (OutputStream os = new FileOutputStream(imageFile)) { imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); } catch (IOException e) { e.printStackTrace(); } return Uri.fromFile(imageFile); } ``` 在上述代码中,如果返回Uri为null,则通过Intent中的extras获取照片数据,并将其保存到指定路径中,然后返回该路径对应的Uri。注意,这种方式获取的是照片的缩略图,如果需要获取原始照片,可以通过保存照片到指定路径的方式来实现。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值