Android 打开相册,选择一张图片并返回
Android 打开相册,选择一张图片并返回
一 打开相册
private static final int ALBUM_OK = 0;
Intent albumIntent = new Intent(Intent.ACTION_PICK, null); albumIntent.setDataAndType( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*"); startActivityForResult(albumIntent, ALBUM_OK);
二 显示图片与图片信息
打开相册使用的是
startActivityForResult(albumIntent, ALBUM_OK);
所以需要一个 onActivityResult(int requestCode, int resultCode, Intent data) 来获取返回结果:
protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (ALBUM_OK == requestCode) { Toast.makeText(this, "OK now", Toast.LENGTH_SHORT).show(); Bitmap bitmap; Log.e("MainActivity ", " onActivityResult "); ContentResolver cr = this.getContentResolver(); Uri uri = data.getData(); try { bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); Log.e("MainActivity ", " onActivityResult " + data.getData().toString());//此处用Log.e,仅是为了查看红色Log方便 imageview.setImageBitmap(bitmap); readExifInfo(getImagePath(uri));//这是用来读取图片的exif } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
getImagePath(Uri) 用来获取图片的资源路径:
private String getImagePath(Uri uri) { if (null == uri) { Log.e("getImagePath", "uri return null"); return null; } Log.e("getImagePath", uri.toString()); String path = null; final String scheme = uri.getScheme(); if (null == scheme) { path = uri.getPath(); } else if (ContentResolver.SCHEME_FILE.equals(scheme)) { path = uri.getPath(); } else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) { String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, proj, null, null, null); int nPhotoColumn = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); if (null != cursor) { cursor.moveToFirst(); path = cursor.getString(nPhotoColumn); } cursor.close(); } return path; }
readExifInfo函数(仅给了参考,这里用log来显示exif):
private void readExifInfo(String path) throws IOException { ExifInterface exif = new ExifInterface(path); String iso = exif.getAttribute(ExifInterface.TAG_ISO); String make = exif.getAttribute(ExifInterface.TAG_MAKE); String model = exif.getAttribute(ExifInterface.TAG_MODEL); String flash = exif.getAttribute(ExifInterface.TAG_FLASH); String time = exif.getAttribute(ExifInterface.TAG_DATETIME); String wb = exif.getAttribute(ExifInterface.TAG_WHITE_BALANCE); String aperture = exif.getAttribute(ExifInterface.TAG_APERTURE); String width = exif.getAttribute(ExifInterface.TAG_IMAGE_WIDTH); String height = exif.getAttribute(ExifInterface.TAG_IMAGE_LENGTH); String focal_len = exif.getAttribute(ExifInterface.TAG_FOCAL_LENGTH); String exposure_time = exif.getAttribute(ExifInterface.TAG_EXPOSURE_TIME); String msg = "时间: "+ time + "\n机型: " + model + "\n厂商: " + make + "\n光感: " + iso + "\n曝光: " + exposure_time + "\n光圈: " + aperture + "\n闪光: " + flash + "\n焦距: " + focal_len+ "\n高度: " + height + "\n宽度: " + width + "\n白平衡: "+ wb; Log.e("readExifInfo", msg); AlertDialog.Builder builder = new Builder(MainActivity.this); builder.setTitle("Exif"); builder.setMessage(msg); builder.create().show(); }
吐槽下,如果Eclipse能有VS这么爽就好了~~