Closed iielse closed 6 years ago
华为系统相册返回Uri不能直接使用 uri.getPath 。不然使用BitmapFactory.decodeFile会返回空
解析方案参考 https://github.com/Yalantis/uCrop 源码
private static Bitmap obtainBmpSource(@NonNull Context context, @NonNull Uri uri, int requiredWidth, int requiredHeight) throws Exception { final ParcelFileDescriptor parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r"); final FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor(); final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options); options.inSampleSize = calculateInSampleSize(options, requiredWidth, requiredHeight); options.inJustDecodeBounds = false; Bitmap decodeSampledBitmap = null; boolean success = false; while (!success) { try { decodeSampledBitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor, null, options); success = true; } catch (OutOfMemoryError error) { Log.e("ImageCropper", "decodeSampledBitmap: BitmapFactory.decodeFileDescriptor: ", error); options.inSampleSize++; } } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { close(parcelFileDescriptor); } int exifOrientation = getExifOrientation(context, uri); int exifDegrees = exifToDegrees(exifOrientation); int exifTranslation = exifToTranslation(exifOrientation); Matrix matrix = new Matrix(); if (exifDegrees != 0) { matrix.preRotate(exifDegrees); } if (exifTranslation != 1) { matrix.postScale(exifTranslation, 1); } if (!matrix.isIdentity()) { decodeSampledBitmap = transformBitmap(decodeSampledBitmap, matrix); } return decodeSampledBitmap; }
修改核心代码 RxImagePickerFragment 替换方法入参 private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<String> pictures) { ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<Uri> pictures) {
RxImagePickerFragment
private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<String> pictures) {
private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<Uri> pictures) {
项目移除了这个工程代码
华为系统相册返回Uri不能直接使用 uri.getPath 。不然使用BitmapFactory.decodeFile会返回空
解析方案参考 https://github.com/Yalantis/uCrop 源码
修改核心代码
RxImagePickerFragment
替换方法入参
private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<String> pictures) {
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓private void onQueryOrTakeSuccess(@NonNull String type, @NonNull List<Uri> pictures) {