- 开启选取图片Intent, 其他方式存在各种问题,
void choosePic() {
Intent intent = new Intent(Intent.ACTION_PICK);// ACTION_GET_CONTENT
intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, PICTURE);
}
- 获取选取的result, 根据标记code判断并获取uri
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {
return;
}
Uri uri = data.getData();
switch (requestCode) {
case PICTURE:
String path = "";
Log.d(TAG, "uri: " + uri);
Log.d(TAG, "uri RealPath: " + getPathFromUri(this, uri));
if (new File(uri.getPath()).exists()) {
path = uri.getPath();
Log.d(TAG, "uri.getPath()");
} else {
path = getPathFromUri(this, uri);
Log.d(TAG, "setImageBitmap");
}
Log.d(TAG, "path: " + path);
Bitmap bm = BitmapFactory.decodeFile(path);
image.setLayerType(View.LAYER_TYPE_HARDWARE,null);
image.setImageBitmap(bm);
File file = new File(path);
Log.d(TAG, "file.exists():" + file.exists());
Log.d(TAG, "file.getPath():" + file.getPath());
break;
default:
break;
}
}
- 对应不同机型,返回的uri类型不同,需判断处理后统一格式
public static String getPathFromUri(Context context, Uri contentUri) {
Cursor cursor = null;
try {
String[] proj = {MediaStore.Images.Media.DATA};
cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else {
return null;
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
- 安卓版本6.0以后, 注意申请权限
@RequiresApi(api = Build.VERSION_CODES.M)
void requestPermission() {
int REQUEST_CODE_CONTACT = 101;
String[] permissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
//验证是否许可权限
for (String str : permissions) {
if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
//申请权限
this.requestPermissions(permissions, REQUEST_CODE_CONTACT);
return;
}
}
}
网友评论