Android相机开发指南(三)
这篇是这个指南中比较短的一篇,其实对于从相册中取出一张图片来显示实在是没什么难的。
使用 Intent.ACTION_PICK你可以通过android的 content provider 获取各类多媒体文件。在本例中,我们将使用ACTION_PICK执行一个基本操作:打开Android图片库,选择一个图像,显示在ImageView上。相关代码在示例工程中有。
打开SimpleAndroidPickerFragment 文件,你可以看到:
@Override
publicvoidonClick(Viewview){
Intenti=newIntent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i,IMAGE_PICKER_SELECT);
}
/**
* Photo Selection result
*/
publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
if(requestCode==IMAGE_PICKER_SELECT&&resultCode==Activity.RESULT_OK){
MainActivityactivity=(MainActivity)getActivity();
Bitmapbitmap=getBitmapFromCameraData(data,activity);
mSelectedImage.setImageBitmap(bitmap);
}
}
从上边代码可以看到,当Fragment中的按钮被触发,一个Intent就会被分发去从EXTERNAL_CONTENT_URI 中获取一类媒体。当Activity result返回时,我们就可以保存并显示bitmap在我们的ImageView上。
这有部分保存bitmap的逻辑:
/**
* Use for decoding camera response data. *
*
* @param data
* @param context
* @return
*/
publicstaticBitmapgetBitmapFromCameraData(Intentdata,Contextcontext){
UriselectedImage=data.getData();
String[]filePathColumn={
MediaStore.Images.Media.DATA
};
Cursorcursor=context.getContentResolver().query(selectedImage,filePathColumn,null,
null,null);
cursor.moveToFirst();
intcolumnIndex=cursor.getColumnIndex(filePathColumn[0]);
StringpicturePath=cursor.getString(columnIndex);
cursor.close();
returnBitmapFactory.decodeFile(picturePath);
}
这里有点小逻辑需要注意一下,基本上我所做的是使用cursor,调用cursor.moveToFirst() 来查询‘last selected image’,这种方法会自动获取我们从相册中选取的图片。然后通过BitmapFactory进行转码。
翻译:@flyouting
时间:2014/03/19
源地址