Android 调用系统相机拍照

android7.0之上调用系统相机步骤:

1、声明一个provider
<provider  
            android:name="android.support.v4.content.FileProvider"  
            android:authorities="com.demo.fileprovider"  
            android:exported="false"  
            android:grantUriPermissions="true">  
            <meta-data  
               android:name="android.support.FILE_PROVIDER_PATHS"  
                android:resource="@xml/file_paths" />  
</provider>  
2、在res文件夹下创建一个xml文件夹,并创建file_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">  
    <paths>  
    <!-- 这里path里设置为空代表整个sd卡进行共享 -->
        <external-path path="" name="photo_demo" />  
    </paths>  
</paths>
3、调用系统相机拍照
Intent intent = new Intent(MediaStore.ACTION_IAMGE_CAPTURE);
    /**
     * 调用系统相机
     */
    private void takePhoto() {
        Uri uri = null;
        if (which_image == FRONT_IMAGE) {
            frontFile = new File(getSDPath() +"/test/front_" + getDate() + ".jpg");
            uri = Uri.fromFile(frontFile);
        } else if (which_image == BACK_IMAGE) {
            backFile = new File(getSDPath() + "/test/back_" + getDate() + ".jpg");
            uri = Uri.fromFile(backFile);
        }
        Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        captureIntent.putExtra(MediaStore.Images.Media.ORIENTATION, 0);
        captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        captureIntent.putExtra("return-data", true);
        startActivityForResult(captureIntent, TAKE_PHOTO);
    }

    /**
     * 获取系统时间
     *
     * @return
     */
    public static String getDate() {
        Calendar ca = Calendar.getInstance();
        int year = ca.get(Calendar.YEAR);           // 获取年份
        int month = ca.get(Calendar.MONTH);         // 获取月份
        int day = ca.get(Calendar.DATE);            // 获取日
        int minute = ca.get(Calendar.MINUTE);       // 分
        int hour = ca.get(Calendar.HOUR);           // 小时
        int second = ca.get(Calendar.SECOND);       // 秒

        String date = "" + year + (month + 1) + day + hour + minute + second;

        return date;
    }

    /**
     * 获取SD path
     *
     * @return
     */
    public String getSDPath() {
        File sdDir = null;
        boolean sdCardExist = Environment.getExternalStorageState()
                .equals(android.os.Environment.MEDIA_MOUNTED); // 判断sd卡是否存在
        if (sdCardExist) {
            sdDir = Environment.getExternalStorageDirectory();// 获取跟目录
            return sdDir.toString();
        }

        return null;
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == TAKE_PHOTO && resultCode == RESULT_OK) {
//            Bundle bundle = data.getExtras();
//            Bitmap bitmap = (Bitmap) bundle.get("data");
//            if (which_image == FRONT_IMAGE) {
//                ivCardFront.setImageBitmap(bitmap);
//            } else if (which_image == BACK_IMAGE) {
//                ivCardBack.setImageBitmap(bitmap);
//            }
            try {
                if (which_image == FRONT_IMAGE) {

                    Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), frontFile.getAbsolutePath(), null, null));
                    ContentResolver contentResolver = this.getContentResolver();
                    Bitmap bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri));
                    ivCardFront.setImageBitmap(bitmap);
                } else if (which_image == BACK_IMAGE) {
                    Uri uri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(), backFile.getAbsolutePath(), null, null));
                    ContentResolver contentResolver = this.getContentResolver();
                    Bitmap bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(uri));
                    ivCardBack.setImageBitmap(bitmap);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值