Android调用手机拍照功能的方法
本文实例讲述了Android调用手机拍照功能的方法。分享给大家供大家参考。具体如下:
一、main.xml布局文件:
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageViewandroid:id="@+id/imageView" android:adjustViewBounds="true" android:layout_gravity="center" android:minWidth="150dip" android:minHeight="150dip" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Buttonandroid:id="@+id/btnPhone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="相册"/> <Buttonandroid:id="@+id/btnTakePicture" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="拍照"/> </LinearLayout>
二、核心代码:
packagecom.ljq.test; importjava.io.ByteArrayOutputStream; importjava.io.File; importandroid.app.Activity; importandroid.content.Intent; importandroid.graphics.Bitmap; importandroid.net.Uri; importandroid.os.Bundle; importandroid.os.Environment; importandroid.provider.MediaStore; importandroid.view.View; importandroid.widget.Button; importandroid.widget.ImageView; publicclassTestActivityextendsActivity{ privatestaticfinalintNONE=0; privatestaticfinalintPHOTO_GRAPH=1;//拍照 privatestaticfinalintPHOTO_ZOOM=2;//缩放 privatestaticfinalintPHOTO_RESOULT=3;//结果 privatestaticfinalStringIMAGE_UNSPECIFIED="image/*"; privateImageViewimageView=null; privateButtonbtnPhone=null; privateButtonbtnTakePicture=null; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView=(ImageView)findViewById(R.id.imageView); btnPhone=(Button)findViewById(R.id.btnPhone); btnPhone.setOnClickListener(onClickListener); btnTakePicture=(Button)findViewById(R.id.btnTakePicture); btnTakePicture.setOnClickListener(onClickListener); } privatefinalView.OnClickListeneronClickListener=newView.OnClickListener(){ @Override publicvoidonClick(Viewv){ if(v==btnPhone){//从相册获取图片 Intentintent=newIntent(Intent.ACTION_PICK,null); intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,IMAGE_UNSPECIFIED); startActivityForResult(intent,PHOTO_ZOOM); }elseif(v==btnTakePicture){//从拍照获取图片 Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(newFile(Environment .getExternalStorageDirectory(),"temp.jpg"))); startActivityForResult(intent,PHOTO_GRAPH); } } }; @Override protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ if(resultCode==NONE) return; //拍照 if(requestCode==PHOTO_GRAPH){ //设置文件保存路径 Filepicture=newFile(Environment.getExternalStorageDirectory() +"/temp.jpg"); startPhotoZoom(Uri.fromFile(picture)); } if(data==null) return; //读取相册缩放图片 if(requestCode==PHOTO_ZOOM){ startPhotoZoom(data.getData()); } //处理结果 if(requestCode==PHOTO_RESOULT){ Bundleextras=data.getExtras(); if(extras!=null){ Bitmapphoto=extras.getParcelable("data"); ByteArrayOutputStreamstream=newByteArrayOutputStream(); photo.compress(Bitmap.CompressFormat.JPEG,75,stream);//(0-100)压缩文件 //此处可以把Bitmap保存到sd卡中 imageView.setImageBitmap(photo);//把图片显示在ImageView控件上 } } super.onActivityResult(requestCode,resultCode,data); } /** *收缩图片 * *@paramuri */ publicvoidstartPhotoZoom(Uriuri){ Intentintent=newIntent("com.android.camera.action.CROP"); intent.setDataAndType(uri,IMAGE_UNSPECIFIED); intent.putExtra("crop","true"); //aspectXaspectY是宽高的比例 intent.putExtra("aspectX",1); intent.putExtra("aspectY",1); //outputXoutputY是裁剪图片宽高 intent.putExtra("outputX",300); intent.putExtra("outputY",500); intent.putExtra("return-data",true); startActivityForResult(intent,PHOTO_RESOULT); } }
希望本文所述对大家的Android程序设计有所帮助。