从相册选取图片 从相册选取图片的流程是:
- 使用startActivityForResult进入相册选取图片
- 使用onActivityResult读取获取到的uri
- 从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;
}
}