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程序设计有所帮助。