最近使用到了拍照与相册选图。
从4.4到6.0,再到7.0,Google关于系统权限与文件安全方面做了几次大的变动。
因此特别让Android猿媛们苦恼,没有一个全兼容的API,只能手动兼容每个版本。
当然Github上也有很多奆奆们的轮子可以使用,但是考虑到项目大小的问题,还是选择自己手动实现。
在此描述两个容易忽视的问题:
1、照片翻转问题
由于硬件缘故,从相册或相机中获取到的照片是翻转的。
1.1 获取照片翻转角度
private int getPhotoDegree(String photoPath){
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
1.2 将图片翻转回正向
if (degree != 0) {
Matrix m = new Matrix();
m.postRotate(degree);
bmp = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), m, true);
}
2、文件读写权限问题:
Android7.0及以上,文件的处理多了一些繁琐的过程。
无法直接使用图片地址,需要使用FileProvider获取Uri。
public static Uri getUriForFile(Context context, String authority, File file) {};并且再向第三方应用提供文件读取和写入时,需要赋予临时的读写权限。
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);笔者就因为在裁剪相册图片时忘记赋予写权限而......

本文讲述了在Android系统权限变化的背景下,如何处理拍照和相册选图过程中遇到的照片翻转和文件读写权限问题。从4.4到7.0,Google对文件安全进行了多次调整,导致开发者需要手动兼容不同版本。文章重点讨论了如何解决照片翻转及Android 7.0以上版本的文件权限问题,包括获取照片旋转角度、翻转图片以及使用FileProvider和临时权限来处理文件。
8193

被折叠的 条评论
为什么被折叠?



