利用系统其它图片浏览apk来选择图片。
直接上代码:
下面这一段时跳转到选择图片的Activity代码
public void onClick(View view)
{
Intent intent=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent,RESULT_LOAD_IMAGE);
}
对于 Intent.ACTION_PICK 的解释:从数据中选择一个项目,并且返回被选择项;并且需要通过一个uri来指向可选择项(们),返回值为被选择项的uri.那么也可以顺势理解intent的第二项参数为什么是一个uri了。
/**
* Activity Action: Pick an item from the data, returning what was selected.
* <p>Input: {@link #getData} is URI containing a directory of data
* (vnd.android.cursor.dir/*) from which to pick an item.
* <p>Output: The URI of the item that was picked.
*/
@SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
public static final String ACTION_PICK = "android.intent.action.PICK";
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,这里指向的系统自带的媒体数据库文件,包含视频,图片,文件等等一系列数据库信息...
我们来看看,源码中对于这条uri的解释:可以得出这里的uri 是“content://media/external/iamges/media”
也就是系统自带的图片数据库位置了,包含图片的大小,日期,分析,存储位置等信息
public static final String AUTHORITY = "media";
private static final String CONTENT_AUTHORITY_SLASH = "content://" + AUTHORITY + "/";
/**
* The content:// style URI for the "primary" external storage
* volume.
*/
public static final Uri EXTERNAL_CONTENT_URI =
getContentUri("external");
/**
* Get the content:// style URI for the image media table on the
* given volume.
*
* @param volumeName the name of the volume to get the URI for
* @return the URI to the image media table on the given volume
*/
public static Uri getContentUri(String volumeName) {
return Uri.parse(CONTENT_AUTHORITY_SLASH + volumeName +
"/images/media");
}
OK,那么我现在来看返回方法onActivityResult();代码中对于code的注解已经很详细了,我就不多说了
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// resultCode==RESULT_OK Activity的自由属性,返回成功
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
// 获得选择图片的uri信息
Uri selectedImage = data.getData();
// 数据库操作
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
// 获得图片位置
picturePath = cursor.getString(columnIndex);
//关闭游标
cursor.close();
// 使用BitmapFactory方法,直接通过图片位置来decode图片
Bitmap bitmap = BitmapFactory.decodeFile(picturePath);
}