android拾遗06——从相册选取图片

从相册选取图片 从相册选取图片的流程是:

  1. 使用startActivityForResult进入相册选取图片
  2. 使用onActivityResult读取获取到的uri
  3. 从uri中解析出图片

代码:

package com.exe.feifei.choosepic;

import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;


public class MainActivity extends ActionBarActivity
{

    final static int REQUEST_CODE_PICK_IMAGE=0;
    ImageView imageView;
    String path;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=(ImageView)findViewById(R.id.imageView);
    }
    public void choose(View v) 
    {
        Intent intent = new Intent(Intent.ACTION_PICK);
        //设置选取的内容是图片
        intent.setType("image/*");
        //第一步
        startActivityForResult(intent, REQUEST_CODE_PICK_IMAGE);
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data)
    {
        //从返回的结果里面得到含有路径的uri
        Uri uri=data.getData();
        //有的设备是将图片封装在data里面传送出来的所以uri可能会为空,需要验证之后再决定
        if (uri!=null)
        {
            //使用cursor查询
            Cursor cursor = getContentResolver().query(data.getData(), null, null, null, null, null);
            cursor.moveToFirst();
            //路径是在查询结果的第二咧
            path = cursor.getString(1);
            imageView.setImageBitmap(getImage(path));
        }
        //如果是为空的话就从bundle里面读data
        else 
        {
            Bundle bundle=data.getExtras();
            imageView.setImageBitmap((Bitmap)bundle.get("data"));
        }
    }

    //根据路径获取图片
    private Bitmap getImage(String path)
    {
        InputStream is=null;
        Bitmap bitmap=null;
        try
        {
            is=new FileInputStream(path);
            bitmap= BitmapFactory.decodeStream(is);
        }
        catch (IOException exception)
        {
            System.out.print("IOwenti");
        }
        finally 
        {
            try 
            {
                is.close();
            }
           catch (IOException e)
           {
               e.printStackTrace();
           }
        }
        return bitmap;
    }
}

猜你喜欢

转载自blog.csdn.net/fate_killer_liu_jie/article/details/46932213