android拾遺06——從相簿選取圖片
阿新 • • 發佈:2018-11-19
從相簿選取圖片 從相簿選取圖片的流程是:
- 使用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;
}
}