你的位置:首页 > 操作系统

[操作系统]android开发之——获取相册图片和路径


Android开发获取相册图片的方式网上有很多种,这里说一个Android4.4后的方法,因为版本越高,一些老的api就会被弃用,新的api和老的api不兼容,导致出现很多问题。

比如:managedQuery()现在已经被getContentResolver().query()替代了,不过它们的参数都是一样的

再比如Android4.4后Intent(Intent.ACTION_GET_CONTENT);和Intent(Intent.ACTION_OPEN_DOCUMENT);两个方法所得到的图片的uri是不一样的,用老的方法导致在Android4.4系统获取不到图片。

  private ImageView imgShow = null;  private TextView imgPath = null;  private final int IMAGE_CODE = 0;  Uri bitmapUri = null;  private final String IMAGE_TYPE = "image/*";

imgShow是一个用来显示图片的imageView控件,imgPath是用来显示获取到图片的路径的TextView控件,都要在onCreate()函数里连接到对应的控件Id,IMAGE_CODE是自定义的一个参数,可以为其它数值。

private void selectImage() {    // TODO Auto-generated method stub    boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;    Intent getAlbum;    if (isKitKatO) {      getAlbum = new Intent(Intent.ACTION_OPEN_DOCUMENT);    } else {      getAlbum = new Intent(Intent.ACTION_GET_CONTENT);    }    getAlbum.setType(IMAGE_TYPE);    startActivityForResult(getAlbum, IMAGE_CODE);  }protected void onActivityResult(int requestCode, int resultCode, Intent data) {    if (resultCode != RESULT_OK) {      Log.e("TAG->onresult", "ActivityResult resultCode error");      return;    }    Bitmap bm = null;    ContentResolver resolver = getContentResolver();    if (requestCode == IMAGE_CODE) {      try {        Uri originalUri = data.getData();    //获得图片的uri        bitmapUri = originalUri;        isSelectPic = true;        bm = MediaStore.Images.Media.getBitmap(resolver, originalUri);        //显得到bitmap图片        imgShow.setImageBitmap(bm);        String[] proj = {MediaStore.Images.Media.DATA};        Cursor cursor = getContentResolver().query(originalUri, proj, null, null, null);        if(cursor.moveToFirst()) {          int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);          String path = cursor.getString(column_index);          imgPath.setText(path);        }        cursor.close();      } catch (IOException e) {        Log.e("TAG-->Error", e.toString());      }    }  }

这里用

getContentResolver().query()替代老的managedQuery(),还在一开始判断编译的sdk版本是否为Android4.4以后的版本
boolean isKitKatO = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
是的话就用新的方法,否则用老的方法,在button控件里调用selectImage()函数就能从图片库获取图片。
要想通过uil得到相应的bitmap图片,可以通过以下方法:
private Bitmap decodeUriAsBitmap(Uri uri) {    Bitmap bitmap = null;    try {      bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));    } catch (FileNotFoundException e) {      e.printStackTrace();      return null;    }    return bitmap;  }

传入获取到的图片的uri就能得到相应的bitmap图片