Android圆形头像设置(实现相机、相册选择并裁剪)兼容Android 7.0/6.0
Android7.0新增了权限修改、目录被限制访问、多窗口 等等,最近在做头像设置的时候,运行到Android7.0的机子上,拍照和进图库都报错:FileUriExposedException,又要进行适配了,先来看一下官方解释:
下面就是我做的适配方法,仅供参考,有啥问题一起讨论解决:
AndroidManifest.xml 增加provider定义
<provider
android:name="android.support.v4.content.FileProvider" //固定
android:authorities="com.lele.avatarcircledemo.fileprovider"//路径 前面为包名,后面为fileprovider固定值,使用包名便于区分
android:exported="false"//是否支持其它应用调用当前组件 ,要求为flase
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"//固定值
android:resource="@xml/file_paths" />//在res目录下定义的filepaths.xml文件,名字可以自定义
</provider>
配置XML文件
在res下创建xml文件夹,并创建filepaths.xml文件,名字可以自定义
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path
name="camera_photos"
path="demo" />
</paths>
圆形ImageView自定义控件
/**
* 圆形头像设置
*/
@SuppressLint("AppCompatCustomView")
public class CircleImageView extends ImageView {
private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP;
private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888;
private static final int COLORDRAWABLE_DIMENSION = 2;
private static final int DEFAULT_BORDER_WIDTH = 0;
private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
private final RectF mDrawableRect = new RectF();
private final RectF mBorderRect = new RectF();
private final Matrix mShaderMatrix = new Matrix();
private final Paint mBitmapPaint = new Paint();
private final Paint mBorderPaint = new Paint();
private int mBorderColor = DEFAULT_BORDER_COLOR;
private int mBorderWidth = DEFAULT_BORDER_WIDTH;
private Bitmap mBitmap;
private BitmapShader mBitmapShader;
private int mBitmapWidth;
private int mBitmapHeight;
private float mDrawableRadius;
private float mBorderRadius;
private boolean mReady;
<