1、通过调用系统的照相机实现照相功能

1)将拍照的图片存到本地文件,然后再读取显示

public class MainActivity extends Activity {private Button btn;private ImageView iv;private File file = null;private static final int REQUEST_CODE = 1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn = (Button) findViewById(R.id.btn);iv = (ImageView) findViewById(R.id.iv);// 设置按钮单击事件btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在sdcard卡中创建一个文件夹,要获取相应的权限File dir = new File(Environment.getExternalStorageDirectory(),"pictures");if (!dir.exists()) {dir.mkdir();}file = new File(dir, System.currentTimeMillis() + ".jpg");if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}// 调用系统的照相机Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));startActivityForResult(i, REQUEST_CODE);}});}// 获取Activity返回结果的方法@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {case REQUEST_CODE:iv.setImageURI(Uri.fromFile(file));break;default:break;}super.onActivityResult(requestCode, resultCode, data);}
}

2)直接读取拍照的数据,并且显示

public class Main extends Activity implements OnClickListener
{private ImageView imageView;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);Button btnTakePicture = (Button)findViewById(R.id.btnTakePicture);btnTakePicture.setOnClickListener(this);imageView = (ImageView)findViewById(R.id.imageview);}protected void onActivityResult(int requestCode, int resultCode, Intent data){if(requestCode == 1){if(resultCode == Activity.RESULT_OK){Bitmap cameraBitmap = (Bitmap)data.getExtras().get("data");imageView.setImageBitmap(cameraBitmap);}}}public void onClick(View view){Intent intent =new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1);}}

相应的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><ImageViewandroid:id="@+id/iv"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="开始拍照" /></LinearLayout>

2、通过调用Camera类实现照相功能

要使用照相机,需要获取相应的权限<uses-permission android:name="android.permission.CAMERA" />

public class MainActivity extends Activity {private SurfaceView sv;private Camera camera;// 照相机对象private Button btn;// 照相按钮private Callback callback = new Callback() {@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {stopPreview();}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {startPreview();}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,int arg3) {}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sv = (SurfaceView) findViewById(R.id.sv);sv.getHolder().addCallback(callback);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {// 照相机拍照camera.takePicture(null, null, new Camera.PictureCallback() {// 拍完照片后的回调方法@Overridepublic void onPictureTaken(byte[] data, Camera camera) {String path = null;if ((path = saveFile(data)) != null) {Intent i = new Intent(MainActivity.this,ImagePreviewActivity.class);i.putExtra("path", path);startActivity(i);} else {// 保存文件失败Toast.makeText(MainActivity.this, "保存照片失败!",Toast.LENGTH_SHORT).show();}}});}});}// 开始预览private void startPreview() {// 打开照相机camera = Camera.open();try {camera.setPreviewDisplay(sv.getHolder());camera.setDisplayOrientation(90);camera.startPreview();} catch (IOException e) {e.printStackTrace();}}// 结束预览private void stopPreview() {camera.stopPreview();camera.release();}// 保存照片的方法private String saveFile(byte[] bytes) {try {// createTempFile()在android 4.x版本后默认的存储路径为:/data/data/应用包名/cache// 而之前的版本该方法会把文件存储在sd上File f = File.createTempFile("img", "");FileOutputStream fos = new FileOutputStream(f);fos.write(bytes);fos.flush();fos.close();return f.getAbsolutePath();} catch (IOException e) {e.printStackTrace();}return null;}
}
public class ImagePreviewActivity extends Activity {private ImageView iv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);iv = new ImageView(this);setContentView(iv);// 获取图片的路径String path = getIntent().getStringExtra("path");if (path != null) {// 显示图片iv.setImageURI(Uri.fromFile(new File(path)));}}}

相应的布局文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><SurfaceViewandroid:id="@+id/sv"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1" /><Buttonandroid:id="@+id/btn"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="拍照" /></LinearLayout>

Android开发_Camera应用相关推荐

  1. Android环境搭建和Android HelloWorld—Android开发环境搭建

    Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...

  2. java安卓开发工具_推荐几个非常实用的Android开发工具

    工欲善其事,必先利其器.我们进行Android开发也要有好的开发工具辅助才能更好更高效的完成各种开发,为用户提供更实用的应用程序.本文就为大家推荐几个非常实用的Android开发工具,及几个常用的编辑 ...

  3. android 网络编程实现,Android开发使用HttpURLConnection进行网络编程详解【附源码下载】...

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便 ...

  4. linux 浏览器源码下载,Android开发:图片浏览器源码

    Android 图片浏览器源码,是你学习Android很好的例子,希望对你的学习有帮助. main.xml android:layout_width="fill_parent" a ...

  5. 2017-2018-2 20165236 实验四《Android开发基础》实验报告

    2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计       班级:1652班       姓名:郭金涛     ...

  6. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  7. indows上的android开发环境软件架构5

    (二)实验要求: ? 修改按下button 显示的内容中添加上自己的学号姓名: ? 添加一个按钮,按钮名称为"退出",并且为这个按钮添加事件代码,使得点击这个按钮后退 出程序.事件 ...

  8. 折叠屏就要来了,适配逼死 Android 开发?

    1. 异型屏还没适配好,折叠屏就要来了,Android 的碎片化,让开发者又多掉了不少头发. 北京时间 11 月 8 日,三星在旧金山向开发者发布了一款可折叠屏幕手机.并表示,新技术需要开发者调整其 ...

  9. 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...

    1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...

最新文章

  1. iOS11、iPhone X、Xcode9 适配指南
  2. OpenCV识别形状
  3. JSP中内置对象pageContent的使用
  4. HTML框架标签的使用-lt;framesetgt;
  5. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程
  6. 使用xml文件存储数据使用xpath查询
  7. es5中数组方法unshift、splice、reduce使用
  8. 聊聊我在美团做算法的感受
  9. Silverlight 2.0学习笔记——RIAs的缺点
  10. 《赖氏经典英语语法》第三集
  11. Myshare.cc 图床对接ShareX自定义图片上传
  12. 安全狗入选信通院“业务安全推进计划”名单
  13. icloud android,如何将照片从 iCloud 转移到 Android
  14. 代码签名是如何工作的,为什么需要代码签名?
  15. Weblogic 弱密码+部署war包getshell
  16. 进阶篇——数据库的索引
  17. 51nod 1298 圆与三角形
  18. python爬虫技术源码_实战|手把手教你用Python爬虫(附详细源码)
  19. tlc5620输出三角波流程图_基于TLC5620 DAC波形发生器的设计——锯齿波、三角波
  20. 10个全球最佳免费土地覆被/土地利用数据资源

热门文章

  1. 为什么Edge一打开就跳转2345网页首页?
  2. 手机桌面百度搜索框不显示热词_高效搜索神器,你选listary还是火柴?
  3. 阿里巴巴Java开发手册(正式版)
  4. 视频教程-Python数据分析与挖掘-Python
  5. 河北正定县2010年政府工作报告(1)
  6. 地理信息系统(ArcGIS)在水文水资源、水环境中的实践技术应用及案例分析
  7. Prometheus V2仿真开发套件全新上市,实现一键启动仿真
  8. 搭档之家:华为手机“秒售罄”炒上6万! 小米等多家折叠屏布局明年
  9. HTML表格鼠标滑过变色 和奇数偶数行变色+点击变色
  10. 金属切削有普通铣床(加工中心)或车床