首先在清单文件中添加权限,无论是拍照还是从相册中选择图片都涉及到用户的隐私,所以我们需要声明权限,需要在清单文件中加入这句:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
代码:
private ImageView imgShow = null;
private TextView imgPath = null;
private final int IMAGE_CODE = 0;
private final String IMAGE_TYPE = "image/*";
private void selectImage() {
// 判断api是否大于19(Android 4.4)
boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
Intent intent;
if (isKitKatO) {
Log.e("Tag","ACTION_OPEN_DOCUMENT");
// 此方法获取不到图片路径
// intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
// 6.0以上使用,获取图片路径
intent=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
} else {
Log.e("Tag","ACTION_GET_CONTENT");
intent = new Intent(Intent.ACTION_GET_CONTENT);
}
intent.setType(IMAGE_TYPE);
startActivityForResult(intent, IMAGE_CODE);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.e("Tag","走了 onActivityResult");
if (resultCode == RESULT_OK) {
Bitmap bm = null;
ContentResolver resolver = getContentResolver();
if (requestCode == IMAGE_CODE) {
try {
Uri uri = data.getData();
Log.e("Tag","Uri==="+uri);
//bm = MediaStore.Images.Media.getBitmap(resolver, uri);
//显得到bitmap图片
//imgShow.setImageBitmap(bm);
// 用Gilide加载uri
Glide.with(this).load(uri).into(imgShow);
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(uri, proj, null, null, null);
if(cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
Log.e("Tag","column_index==="+column_index);
// 获取到图片路径
String path = cursor.getString(column_index);
Log.e("Tag","path==="+path);
imgPath.setText(path);
}
} catch (Exception e) {
e.printStackTrace();
Log.e("Tag","Exception==="+e);
}
}
}
}