調用系統相機,相冊設置頭像

最近在寫項目再次用到了調用相機相冊裏面的圖片去設置頭像,由於功能不經常使用,很容易忘掉,所以記錄一下小知識點

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根據自己的實際情況定義


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