添加图片代码片段

           利用系统其它图片浏览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 ;

对于 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");
            }


那么对于 startActivityForResult(intent,RESULT_LOAD_IMAGE);  就没什么好解释的了,RESULT_LOAD_IMAGE 是我自己定义的 int 常量


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);

		}


Thanks


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值