android 直接開啟系統圖片庫
阿新 • • 發佈:2019-02-11
首先確定正確的Intent就成功了一半,很多時候我們只看到了Intent.ACTION_GET_CONTENT,但使用就不會直接開啟相簿,而且選中後無法返回圖片路徑,下面才是圖片庫的正確開啟方式
Intent openAlbumIntent = new Intent(
Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
private static final int PHOTOZOOM = 2;
Intent openAlbumIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); openAlbumIntent.setType("image/*"); openAlbumIntent.putExtra("crop", true); openAlbumIntent.putExtra("return-data", true); startActivityForResult(openAlbumIntent, PHOTOZOOM);
@Override public void onActivityResult(int requestCode, intresultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode != RESULT_OK) { return; } switch (requestCode){ case PHOTOZOOM://相簿 if (data==null) { return; } picPath = selectImage(getApplicationContext(),data);mHead_imgv.setImageBitmap(nativeBitmap(picPath)); break; default: break; } }
然後在下方法裡返回圖片路徑
public static String selectImage(Context context, Intent data){ Uri selectedImage = data.getData(); if(selectedImage!=null){ String uriStr=selectedImage.toString(); String path=uriStr.substring(10,uriStr.length()); if(path.startsWith("com.sec.android.gallery3d")){ return null; } } String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(selectedImage,filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); return picturePath;
轉化為bitmap設定,opts的值越大,圖片質量越差,但能有效防止圖片過大造成記憶體溢位的異常
public static Bitmap nativeBitmap(String imagepath){ BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inSampleSize = 4; Bitmap bit = BitmapFactory.decodeFile(imagepath,opts); return bit; }