调用系统相机,相册设置头像

最近在写项目再次用到了调用相机相册里面的图片去设置头像,由于功能不经常使用,很容易忘掉,所以记录一下小知识点

1.添加权限

<!-- 许可使用照相机 -->
    <uses-permission android:name="android.permission.CAMERA" />

2.调用系统相机

 //从相机获取图片
    private void getPhotoFromCamera(){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        // 下面这句指定调用相机拍照后的照片存储的路径
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
                Environment.getExternalStorageDirectory(), "head.png")));
        startActivityForResult(intent, GET_PHOTO_FROM_CAMERA);
    }
3.调用系统相册

//从相册获取图片
    private void getPhotoFromAlbum(){
        Intent intent = new Intent(Intent.ACTION_PICK, null);
        intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                "image/*");
        startActivityForResult(intent, GET_PHOTO_FORM_ALBUM);
    }
4.调用系统裁剪

//调用系统裁剪照片
    private void photoClip(Uri uri) {
        Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        // 设置在开启的Intent中设置显示的VIEW可裁剪
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 150);
        intent.putExtra("outputY", 150);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, PHOTO_CLIP);
    }

5.结果处理

调用相机,相册,系统裁剪结果统一在onActivityForResult中处理

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case GET_PHOTO_FROM_CAMERA:
                if(resultCode == -1){
                    L.d("+++++++++++++++++++++++++++++相机回调成功");
                    File file = new File(Environment.getExternalStorageDirectory()
                            + "/head.png");
                    if (file.exists()) {
                        photoClip(Uri.fromFile(file));
                    }
                }
                break;
            case GET_PHOTO_FORM_ALBUM:
                L.d("+++++++++++++++++++++++++++++相册回调成功");
                if (data != null) {
                    photoClip(data.getData());
                }
                break;
            case PHOTO_CLIP:
                L.d("++++++++++++++++++++++++++++裁剪回调成功");
                if (data != null) {
                    Bundle extras = data.getExtras();
                    if (extras != null) {
                        Bitmap photo = extras.getParcelable("data");
                        headCircleImageView.setImageBitmap(photo);
                    }
                }
                break;
        }
    }

requestCode根据自己的实际情况定义


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章