android打开手机相机拍照 并获取图片真实路径

本文分享了在Android项目中如何打开相机拍照并获取图片真实路径的两种方法:一种是通过onActivityResult获取data后再保存到SD卡,另一种是在开启相机时指定文件路径直接获取。同时提到了在不同Android版本间需要进行兼容处理。
摘要由CSDN通过智能技术生成

       我们再做项目的时候,很多地方,都遇到过需要打开手机相册进行拍照,然后将照片上传到服务器。那么下面我就把我项目中打开相机拍照的功能和大家分享一下。

方法一:

1:打开相机


/**
 * 调用相机拍照
 */
private void openCamera() {
    /**拍照申请权限**/
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, Constant.APPLYFOR_CAMERA_JURISDICTION);
    } else {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        /** 启动相机*/
        startActivityForResult(intent, Constant.REQUEST_THUMBNAIL);

    }
}

2:在onActivityResult 方法中,获取到data。


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

        switch (requestCode) {
            case Constant.REQUEST_THUMBNAIL:
                /**
                 * 通过这种方法取出的拍摄会默认压缩,因为如果相机的像素比较高拍摄出来的图会比较高清,
                 * 如果图太大会造成内存溢出(OOM),因此此种方法会默认给图片尽心压缩
                 */
            String takePhotoPath = Utils.getTakePhotoPath(data);
                break;
        }
}

3:获取到真实路径

/***
 * 获取拍照后的路径
 * @param data
 * @return
 */
public static String getTakePhotoPath(Intent data) {
    Bitmap photo = null;
    Uri uri = data.getData();
    if (uri != null) {
        photo = BitmapFactory.decodeFile(uri.getPath());
    }
    if (photo == null) {
        Bundle bundle = data.getExtras();
        if (bundle !
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Android中,获取图片真实路径通常发生在用户选择图片后,通过Activity的`ACTION_GET_CONTENT`或者`ACTION_PICK_MEDIA`等意图来选择图片。以下是一般的步骤: 1. **启动相机或相册选择器**: 使用`Intent`启动相机或相册应用程序,让用户选择图片,例如: ```java Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, SELECT_PICTURE_REQUEST_CODE); ``` 2. **处理 onActivityResult**: 当用户选择图片后,会回调`onActivityResult`方法,你可以从这里获取图片路径: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SELECT_PICTURE_REQUEST_CODE && resultCode == RESULT_OK) { Uri selectedImage = data.getData(); String imagePath = getPath(selectedImage); // 这里使用getPath()函数尝试获取图片的文件路径 } } private String getPath(Uri uri) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, proj, null, null, null); if (cursor != null) { int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } else { return null; } } ``` 3. **注意文件权限和生命周期**: 获取到的路径可能是在应用内部存储或者外部存储,确保你的应用具有读取对应位置的权限,并在需要的时候妥善处理文件的关闭和清理,因为某些情况下,如设备重启,这些路径可能会失效。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值