小米选择相册时如果不使用系统截屏,直接压缩不会报“保存时发生错误,保存失败”的错误,如果截屏就会报如上错误。
需要把URI地址转为图片地址,再包成file文件转为URI
Uri uri = intent.getData();String type = intent.getType();if (uri.toString().contains("com.miui.gallery.open")) {uri = getImageContentUri(activity, new File(getRealFilePath(activity, uri)));}
uri转为图片地址
/*** 将URI转为图片的路径** @param context* @param uri* @return*/public static String getRealFilePath(final Context context, final Uri uri) {if (null == uri)return null;final String scheme = uri.getScheme();String data = null;if (scheme == null)data = uri.getPath();else if (ContentResolver.SCHEME_FILE.equals(scheme)) {data = uri.getPath();} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {Cursor cursor = context.getContentResolver().query(uri,new String[]{ImageColumns.DATA}, null, null, null);if (null != cursor) {if (cursor.moveToFirst()) {int index = cursor.getColumnIndex(ImageColumns.DATA);if (index > -1) {data = cursor.getString(index);}}cursor.close();}}return data;}
最后转成uri
public static Uri getImageContentUri(Context context, File imageFile) {String filePath = imageFile.getAbsolutePath();Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Images.Media._ID},MediaStore.Images.Media.DATA + "=? ",new String[]{filePath}, null);if (cursor != null && cursor.moveToFirst()) {int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));Uri baseUri = Uri.parse("content://media/external/images/media");return Uri.withAppendedPath(baseUri, "" + id);} else {if (imageFile.exists()) {ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.DATA, filePath);return context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);} else {return null;}}}