1. 程式人生 > >android 直接開啟系統圖片庫

android 直接開啟系統圖片庫

首先確定正確的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, int 
resultCode, 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;
}