热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java调用手机拍照功能_Android调用手机拍照功能的方法

本文实例讲述了Android调用手机拍照功能的方法。分享给大家供大家参考。具体如下:一、main.xml布局文件:android:orientation

本文实例讲述了Android调用手机拍照功能的方法。分享给大家供大家参考。具体如下:

一、main.xml布局文件:

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

android:adjustViewBounds="true"

android:layout_gravity="center"

android:minWidth="150dip"

android:minHeight="150dip"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="相册" />

android:layout_height="wrap_content"

android:layout_width="fill_parent"

android:text="拍照" />

二、核心代码:

package com.ljq.test;

import java.io.ByteArrayOutputStream;

import java.io.File;

import android.app.Activity;

import android.content.Intent;

import android.graphics.Bitmap;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.provider.MediaStore;

import android.view.View;

import android.widget.Button;

import android.widget.ImageView;

public class TestActivity extends Activity {

private static final int NONE = 0;

private static final int PHOTO_GRAPH = 1;// 拍照

private static final int PHOTO_ZOOM = 2; // 缩放

private static final int PHOTO_RESOULT = 3;// 结果

private static final String IMAGE_UNSPECIFIED = "image/*";

private ImageView imageView = null;

private Button btnPhone = null;

private Button btnTakePicture = null;

@Override

public void onCreate(Bundle savedInstanceState) {

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);

}

private final View.OnClickListener onClickListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

if(v==btnPhone){ //从相册获取图片

Intent intent = new Intent(Intent.ACTION_PICK, null);

intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);

startActivityForResult(intent, PHOTO_ZOOM);

}else if(v==btnTakePicture){ //从拍照获取图片

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment

.getExternalStorageDirectory(),"temp.jpg")));

startActivityForResult(intent, PHOTO_GRAPH);

}

}

};

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == NONE)

return;

// 拍照

if (requestCode == PHOTO_GRAPH) {

// 设置文件保存路径

File picture = new File(Environment.getExternalStorageDirectory()

+ "/temp.jpg");

startPhotoZoom(Uri.fromFile(picture));

}

if (data == null)

return;

// 读取相册缩放图片

if (requestCode == PHOTO_ZOOM) {

startPhotoZoom(data.getData());

}

// 处理结果

if (requestCode == PHOTO_RESOULT) {

Bundle extras = data.getExtras();

if (extras != null) {

Bitmap photo = extras.getParcelable("data");

ByteArrayOutputStream stream = new ByteArrayOutputStream();

photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件

//此处可以把Bitmap保存到sd卡中

imageView.setImageBitmap(photo); //把图片显示在ImageView控件上

}

}

super.onActivityResult(requestCode, resultCode, data);

}

/**

* 收缩图片

*

* @param uri

*/

public void startPhotoZoom(Uri uri) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(uri, IMAGE_UNSPECIFIED);

intent.putExtra("crop", "true");

// aspectX aspectY 是宽高的比例

intent.putExtra("aspectX", 1);

intent.putExtra("aspectY", 1);

// outputX outputY 是裁剪图片宽高

intent.putExtra("outputX", 300);

intent.putExtra("outputY", 500);

intent.putExtra("return-data", true);

startActivityForResult(intent, PHOTO_RESOULT);

}

}

希望本文所述对大家的Android程序设计有所帮助。



推荐阅读
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
author-avatar
四海承风2502893247
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有