/** * 打开相册 */ private void chooseFromAlbum() { Intent intent = new Intent(); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); intent.setAction(Intent.ACTION_PICK); startActivityForResult(intent, Constant.REQ_ALBUM); }
/** * 相机拍照 */ private void takePhoto() { // 跳转到系统的拍照界面 Intent intentToTakePhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // 指定照片存储位置为sd卡本目录下 // 这里设置为固定名字 这样就只会只有一张temp图 如果要所有中间图片都保存可以通过时间或者加其他东西设置图片的名称 mTempPhotoPath = Environment.getExternalStorageDirectory() + "/Pictures/" + "avatar.jpeg"; // 获取图片所在位置的Uri路径 *****这里为什么这么做参考问题2***** mImageUri = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".fileprovider", new File(mTempPhotoPath)); LogUtil.e(TAG, "imageUri = " + mImageUri); //下面这句指定调用相机拍照后的照片存储的路径 intentToTakePhoto.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(intentToTakePhoto, Constant.REQ_CAMERA); }
拍照,相册回调处理
方式1:
/** * 获取拍照图片 */ private void getCameraPicture() { try { //该uri就是照片文件夹对应的uri Bitmap bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(mImageUri)); // 给相应的ImageView设置图片 未裁剪 civAvatar.setImageBitmap(bit); } catch (Exception e) { e.printStackTrace(); } }
/** * 获取相册图片 * * @param data */ private void getAlbumPicture(Intent data) { Uri selectedImage = data.getData(); String selectedString = selectedImage.toString(); if (selectedString.indexOf("/document/") > 0 && selectedString.indexOf("%3A") > 0) { String id = selectedString.split("%3A")[1]; selectedImage = Uri.parse(MediaStore.Images.Media.EXTERNAL_CONTENT_URI + "/" + id); } String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); if (picturePath == null) { Toast.makeText(this, "请从相册里选择", Toast.LENGTH_SHORT).show(); } else { PicassoUtils.loadImageFromFile(this, new File(picturePath), 40, 40, civAvatar); } }
方式2: