Android 开发调用相机拍照如何获取清晰照片

没有谁的幸运,是凭空而来,只有当你足够努力,你才会足够幸运。这世界不会辜负每一份努力和坚持,时光不会怠慢执着而勇敢的每一个人。

做过类似需求的童鞋都知道,在activity通过如下代码可以启动相机,然后重写onActivityResult,

//启动相机程序
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
startActivityForResult(intent,TAKE_PHONE);

在此方法中可以获取拍照返回的数据,那么问题来了,在onActivityResult方法里通过intent.getdata获取的图片是经过默认压缩的,显示浏览是非常模糊的,如何解决这个问题呢?我是这样做的。
在启动的时候先指定图片的保存路径

1.创建路径
File filesDir;
            if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {//判断sd卡是否挂载
                //路径1:storage/sdcard/Android/data/包名/files
                filesDir = getExternalFilesDir("");

            } else {//手机内部存储
                //路径:data/data/包名/files
                filesDir = getFilesDir();
            }

            //创建一个File对象用于存储拍照后的照片
            File outputImage=new File(filesDir,BitmapUtils.getImgName());

            try{
                if(outputImage.exists()){
                    outputImage.delete();
                }
                outputImage.createNewFile();
            }catch (Exception e){
                e.printStackTrace();
            }

            //判断Android版本是否是Android7.0以上
            if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.N){
                                                                                                                imageUri=FileProvider.getUriForFile(MainActivity.this,"com.rt.rtplasma",outputImage);
            }else{
                imageUri= Uri.fromFile(outputImage);
            }

            //启动相机程序
            Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

            System.out.println("imageUri==="+imageUri);
            intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);
            startActivityForResult(intent,TAKE_PHONE);
        }
2.在AndroidManifest中注册存储照的容器

<!--
name:属性值,固定写法
authorities:组件标识,按照江湖规矩,都以包名开头,避免和其它应用发生冲突。和FileProvider.getUriForFile()方法的第二个参数一致
exported:要求必须为false,为true则会报安全异常。
grantUriPermissions:true,表示授予 URI 临时访问权限。
-->
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="com.rt.rtplasma"
    android:exported="false"
    android:grantUriPermissions="true">

    <!--指定Uri的共享路径-->
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />

</provider>
3.创建file_paths文件 在res目录创建一个xml文件夹,再在xml文件夹只创建一个file_paths.xml文件,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<paths >
    <external-path name="my_image" path="" /> 
//name属性值可以随便填 path属性值表示共享的具体路径,设置为空,表示将整个SD卡目录进行共享,也可以设置共享的具体路径

</paths>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值