最近寫項目,遇到了,在此記錄一下。。。。
</p><p>import java.io.ByteArrayOutputStream;<br />import java.io.InputStream;<br />import android.app.Activity;<br />import android.app.AlertDialog;<br />import android.content.ContentResolver;<br />import android.content.DialogInterface;<br />import android.content.Intent;<br />import android.database.Cursor;<br />import android.graphics.Bitmap;<br />import android.graphics.BitmapFactory;<br />import android.net.Uri;<br />import android.os.Bundle;<br />import android.provider.MediaStore;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.ImageView;</p><p>public class PicChooserActivity extends Activity {<br /> /** Called when the activity is first created. */<br />private ImageView imageView;<br />private OnClickListener imgViewListener;<br />private Bitmap myBitmap;<br />private byte[] mContent;<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> imageView =(ImageView) findViewById(R.id.ivPic);</p><p> imageView.setOnClickListener(new OnClickListener() {</p><p>@Override<br />public void onClick(View v) {<br />// TODO Auto-generated method stub<br />final CharSequence[] items = { "相簿", "拍照" };</p><p>AlertDialog dlg = new AlertDialog.Builder(PicChooserActivity.this).setTitle("選擇照片").setItems(items,<br />new DialogInterface.OnClickListener() {</p><p>@Override<br />public void onClick(DialogInterface dialog, int which) {<br />// TODO Auto-generated method stub<br />//這裡item是根據選擇的方式,在items數組裡面定義了兩種方式,拍照的下標為1所以就調用拍照方法<br />if(which==1){<br />Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");<br />startActivityForResult(getImageByCamera, 1);<br />}else{<br />Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);<br />getImage.addCategory(Intent.CATEGORY_OPENABLE);<br />getImage.setType("image/jpeg");<br />startActivityForResult(getImage, 0);<br />}</p><p>}<br />}).create();<br />dlg.show();<br />}<br />});</p><p> }</p><p> @Override<br /> protected void onActivityResult(int requestCode, int resultCode, Intent data) {<br /> // TODO Auto-generated method stub<br /> super.onActivityResult(requestCode, resultCode, data);</p><p> ContentResolver contentResolver =getContentResolver();<br /> /**<br /> * 因為兩種方式都用到了startActivityForResult方法,這個方法執行完後都會執行onActivityResult方法,<br /> * 所以為了區別到底選擇了那個方式擷取圖片要進行判斷,這裡的requestCode跟startActivityForResult裡面第二個參數對應<br /> */</p><p> if(requestCode==0){</p><p> //方式一<br /> /*try {<br /> //獲得圖片的uri<br /> Uri orginalUri = data.getData();<br /> //將圖片內容解析成位元組數組<br /> mContent = readStream(contentResolver.openInputStream(Uri.parse(orginalUri.toString())));<br /> //將位元組數群組轉換為ImageView可調用的Bitmap對象<br /> myBitmap =getPicFromBytes(mContent,null);<br /> ////把得到的圖片綁定在控制項上顯示<br /> imageView.setImageBitmap(myBitmap);<br />} catch (Exception e) {<br />e.printStackTrace();<br />// TODO: handle exception<br />}*/</p><p> //方式二<br /> try {<br /> Uri selectedImage = data.getData();<br /> String[] filePathColumn = { MediaStore.Images.Media.DATA };</p><p> Cursor cursor = getContentResolver().query(selectedImage,<br /> filePathColumn, null, null, null);<br /> cursor.moveToFirst();</p><p> int columnIndex = cursor.getColumnIndex(filePathColumn[0]);<br /> String picturePath = cursor.getString(columnIndex);<br /> cursor.close();<br /> imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));<br />} catch (Exception e) {<br />// TODO: handle exception<br />e.printStackTrace();<br />}</p><p> }else if(requestCode==1){<br /> try {<br /> Bundle extras = data.getExtras();<br /> myBitmap = (Bitmap) extras.get("data");<br /> ByteArrayOutputStream baos = new ByteArrayOutputStream();<br /> myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos);<br />mContent=baos.toByteArray();<br />} catch (Exception e) {<br />e.printStackTrace();<br />// TODO: handle exception<br />}<br /> imageView.setImageBitmap(myBitmap);<br /> }</p><p> }</p><p> public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) {<br /> if (bytes != null)<br /> if (opts != null)<br /> return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);<br /> else<br /> return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);<br /> return null;<br /> } </p><p> public static byte[] readStream(InputStream in) throws Exception{<br /> byte[] buffer =new byte[1024];<br /> int len =-1;<br /> ByteArrayOutputStream outStream = new ByteArrayOutputStream();</p><p> while((len=in.read(buffer))!=-1){<br /> outStream.write(buffer, 0, len);<br /> }<br /> byte[] data =outStream.toByteArray();<br /> outStream.close();<br /> in.close();<br /> return data;<br /> }</p><p>}