如何访问手机内存(内存)中的图片并显示
最近在弄一个android项目,需要让用户从自己手机中选择一张图片做头像,在此记录一下,也方便不懂的伙伴借鉴。
1.添加系统权限
读写手机存储的数据的权限
在manifests里面加这两段代码
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2.设置点击事件
当点击一个组件后打开相册或文件,在点击事件里面加这三段代码。第三行代码中的registerActivity是当前的activity类,startActivityForResult()第二个参数是自己定义的,是一个标志位,startActivityForResult后会自动调用onActivityResult,需要在onActivityResult里面捕获标志位进行相应操作。
Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
registerActivity.this.startActivityForResult(intent, GlobalVariable.CAMERA_REQUEST_CODE);
以我的为例
3.重写onActivityResult
在switch里面的case中写上一步中的标志位,我这里是GlobalVariable.CAMERA_REQUEST_CODE,你可以在上一步中自定义,这里建议定义一个javaBean专门存标志位,不容易乱。
userIcon.setImageURI(uri)这句是给我的imageview设置图片,是我自定义的。
getRealPathFromURI()用来把uri转换成路径的,没啥用。只想知道怎么拿到图片并显示的这部分可忽略。
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case GlobalVariable.CAMERA_REQUEST_CODE:
if (resultCode == Activity.RESULT_OK) {
try {
Uri uri = data.getData();
String iconStr = getRealPathFromURI(uri);//获取uri
userIcon.setImageURI(uri);//根据uri设置头像
Log.d(registerActivity.TAG, "注册界面:" + iconStr);
} catch (Exception e) {
e.printStackTrace();
Log.d(registerActivity.TAG, e.getMessage());
}
} else {
Log.d(registerActivity.TAG, "失败");
}
break;
}
}
public String getRealPathFromURI(Uri contentUri) {
String res = null;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
res = cursor.getString(column_index);
}
cursor.close();
return res;
}
4.效果
这个界面是我的小项目