Android 开发,调用相机的相关代码

求高手写一段代码。具体条件和需求是这样的:在activity_main.xml的布局文件里已经预置了一个ImageView控件(用于显示相机拍照的照片,ID为imgPho... 求高手写一段代码。具体条件和需求是这样的:

在 activity_main.xml 的布局文件里已经预置了一个 ImageView 控件(用于显示相机拍照的照片,ID 为 imgPhoto)和一个 Button 控件(触发拍照事件,ID 为 btnCamera)。现在点击按钮后,系统自动打开相机活动等待用户拍照。最终的相片文件存到应用数据文件夹里,以 JPG 格式压缩图片后,按时间戳命名,并将最终的照片显示在 ImageView 控件上。该如何写 MainActivity 的代码呢?
展开
 我来答
qiaochbao
2015-06-16 · 超过16用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:36.5万
展开全部
/**
* @Description 调用系统相机照相,获取原图像
* @param activity 就是你的mainactivity
* @param dir 拍照后保存在本地的图片路径
* @param filename 图片的名称
* @param cmd 返回的requestCode

* @return void
*/
public static boolean takePhoto(final Activity activity, final String dir,
final String filename, final int cmd) {
String filePath = dir + filename;

// final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Log.d("test", "MediaStore.ACTION_IMAGE_CAPTURE"
+ android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE == null ? "android.media.action.IMAGE_CAPTURE"
: android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
final File cameraDir = new File(dir);
if (!cameraDir.exists()) {
// return false;
cameraDir.mkdirs();
}

final File file = new File(filePath);
final Uri outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
try {
activity.startActivityForResult(intent, cmd);

} catch (final ActivityNotFoundException e) {
return false;
}
return true;
}

然后在你的onactivityforresult方法里写:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

switch (requestCode) {
case PHOTOGRAPH://拍照
if (resultCode == RESULT_OK) {
String url = FileHelper.Get_SDCardPath() + Constant.HHXH_IMGDIR
+ BitmapUtil.tempPhoto;//图片路径,和你前面调用相册时设的路径一样
Bitmap bitmap = BitmapUtil
.extractThumbNail(url, 480, 320, true);//这里是根据本地路径获取图片并压缩的,这个我写的代码比较多就不上传了
findviewbyid(R.id.imgPhoto).setImageBitmap(bitmap);

}
}
}
lolooss
2015-06-16
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
1、配置文件加入权限:

<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
2、在aictivity里面重写startActivityForResult这个方法。
3、加入常量 final int TAKE_PICTURE = 1;//为了表示返回方法中辨识你的程序打开的相机
4、在你重写的方法里面加入这段代码:if (requestCode == TAKE_PICTURE) {
if (resultCode == RESULT_OK) {
Bitmap bm = (Bitmap) data.getExtras().get("data");
imgPhoto.setImageBitmap(bm);//想图像显示在ImageView视图上,
long time=System.currentTimeMillis()
File myCaptureFile = new File("sdcard/"+time+".jpg");
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
/* 采用压缩转档方法 */
bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);
/* 调用flush()方法,更新BufferStream */
bos.flush();
/* 结束OutputStream */
bos.close();
5、在btnCamera中添加事件加入这段代码:Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);
startActivityForResult(intent, TAKE_PICTURE);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式