在Android原生态开发过程中,往往会设计到用户头像的设置问题,一般来讲设置头像需要用到拍照、获取照片、存储照片、裁剪照片、显示照片等问题,本文将一步一步的进行说明讲解。
首先需要强调几点我在开发过程中遇到的问题。
下面进行具体的功能实现。
在该功能的开发过程中需要使用到相机权限、存储空间读写权限。
权限获取可以大致分为两部:在manifest文件中声明权限,在activity中动态获取权限。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
//一下代码可以直接在首页面中的onCreate方法中调用requestPermission()
//申请权限返回码
private final int REQUEST_PERMISSION_CODE = 0x01;
//可以使用Manifest.permission.***表示
private final String[] permissions = new String[]{
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.CAMERA"};
/**
* 动态申请权限
*/
private void requestPermission() {
List<String> requestPermissions = new ArrayList<>();
for (String permission:permissions) {
//判断用户是否已经授权
if (ContextCompat.checkSelfPermission(this,
permission) != PackageManager.PERMISSION_GRANTED){
//如果用户没有授权
requestPermissions.add(permission);
}
}
/**
* 用户动态授权
* 执行该代码后,将进入授权界面,此时主线程继续执行
* 用户授权结果将被onRequestPermissionsResult方法接受,如果需要处理则重写该方法
*/
if(requestPermissions.size() != 0){
String[] strs = requestPermissions.toArray(new String[requestPermissions.size()]);
ActivityCompat.requestPermissions(this, strs, REQUEST_PERMISSION_CODE);
}
}
处理授权结果
/**
* @param requestCode The request code passed in {@link #requestPermissions(String[], int)}.
* @param permissions The requested permissions. Never null.
* @param grantResults The grant results for the corresponding permissions
*/
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//授权结果的处理逻辑
}
上述过程完成了权限申请过程,如果用户授权允许调用相机,则后续可以直接调用相机进行相关操作。