Android开发手机相机应用

1.开发环境

Android Studio(附软件配置教程https://blog.csdn.net/hongfei568718926/article/details/100531916)

2.实现方法

(1)AndroidManifest.xml文件的配置

需要在默认的基础上面加上

<uses-permission android:name="android.permission.CAMERA"/>   更多<uses-permission>请参考

这里解释一下<uses-permission>的意思Android SDK中定义的访问某些功能的权限参数,当应用程序需要使用这些功能的时候需要使用<user-permission/>标注明确的权限。

<permission/>意思是:一个应用程序自定义的权限,可以供其他应用程序使用本应用的说明

贴出我的AndroidManifest.xml文件信息

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.chen.myapplication"><uses-permission android:name="android.permission.CAMERA"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

(2)布局activity_main.xml文件配置

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.chen.myapplication.MainActivity"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginBottom="8dp"app:layout_constraintBottom_toBottomOf="parent"tools:layout_editor_absoluteX="8dp"tools:ignore="MissingConstraints"><SurfaceViewandroid:id="@+id/surfaceView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_alignParentEnd="true"android:layout_toEndOf="@+id/imageView"tools:layout_editor_absoluteX="8dp"tools:layout_editor_absoluteY="8dp" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="拍照"tools:layout_editor_absoluteX="160dp"tools:layout_editor_absoluteY="447dp" /><ImageViewandroid:id="@+id/imageView"android:layout_width="0dp"android:layout_height="0dp"android:layout_alignParentStart="true"android:layout_alignParentTop="true"app:srcCompat="@android:color/background_light"tools:layout_editor_absoluteX="8dp"tools:layout_editor_absoluteY="8dp" /></RelativeLayout></android.support.constraint.ConstraintLayout>

(3)MainActivity的类信息

package com.example.chen.myapplication;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.ImageFormat;import android.hardware.Camera;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import android.widget.ImageView;import java.io.IOException;public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback ,View.OnClickListener{private Button btn;//按钮的在代码中的体现,btn为名称可随意更改private SurfaceView mSurFaceView;private ImageView mImageView;private SurfaceHolder mSurfaceHolder;//用于获取SurfaceView的句柄,使其能被mCamera使用,以打开相机private Camera mCamera;//照相机的个体。private Camera.Parameters parameters;//相机的参数设置的变量@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//接下来的代码是将布局中的工具和代码中的个体对应起来,或者说联系起来btn = (Button) findViewById(R.id.button);mSurFaceView = (SurfaceView) findViewById(R.id.surfaceView);mImageView = (ImageView) findViewById(R.id.imageView);//在此之后就可以使用btn、mSurfaceView、mImageView来对布局中的工具进行操作了mImageView.setVisibility(View.GONE);//设置这个工具不可见btn.setText("拍照");//如代码所示,可以更改按钮的名字mSurfaceHolder = mSurFaceView.getHolder();//代码作用直译即可mSurfaceHolder.addCallback(this);btn.setOnClickListener(this);//设置按钮监听事件,这样当用户按按钮的时候就可以在单击事件函数里得到单击的信息了}//在Surface创建的时候执行这个函数@Overridepublic void surfaceCreated(SurfaceHolder holder) {mCamera = Camera.open();//打开摄像头(后摄像头),效果就是从此,mCamera就控制了手机的摄像头try{mCamera.setPreviewDisplay(mSurfaceHolder);//之后,mCamera从摄像机里获得的图像,就会实时的显示在mSurfaceView中。mCamera.setDisplayOrientation(90);//使你预览的画面呈现为正常的视觉画面,可是删除此行试试效果parameters = mCamera.getParameters();//将现在camera的参数设置保存到变量parameter中//接下来的代码是对mCamera参数的调整,或者说设置parameters.setPreviewSize(parameters.getSupportedPreviewSizes().get(0).width,parameters.getSupportedPreviewSizes().get(0).height);//设置预览的尺寸,通过此种方法可设置为最大预览尺寸(我觉得)parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO);         //设置适合照片对焦parameters.setRotation(90);//跟mCamera.setDisplayOrientation(90);有类似的作用parameters.setPictureFormat(ImageFormat.JPEG);//设置得到的照片模式mCamera.setParameters(parameters);//这就是将我们改变的相机参数设置到相机里了mCamera.startPreview();//开始预览相机画面}catch (IOException e){//如果上面try中的代码有代码执行出错,就会来到这里e.printStackTrace();mCamera.release();//释放摄像头,避免发生一直占用摄像头的情况mCamera=null;//使mCamera为空,就是不代表任何东西。这也是保护代码}}//在Surface被改变的时候执行这个函数@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {//此处不填任何代码,因为本程序中不需要这个功能,但是这个函数不能删除}//在Surface销毁的时候执行这个函数@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {mCamera.setPreviewCallback(null);mCamera.stopPreview();//停止预览,毕竟Surface都已经销毁了mCamera.release();mCamera=null;}//单击事件,这个函数收集所有的单击事件@Overridepublic void onClick(View v) {if(v.getId()==R.id.button){//当用户单击的是button的时候执行下面的代码mCamera.autoFocus(null);//聚焦mCamera.takePicture(null,null,mPictureCallback);//开始照相,mPictureCallback为回调函数}}private Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {@Overridepublic void onPictureTaken(byte[] data, Camera camera) {mImageView.setVisibility(View.VISIBLE);//设置这个工具可见Bitmap btm = BitmapFactory.decodeByteArray(data, 0, data.length);//将照片数据变成图像mImageView.setImageBitmap(btm);//显示这个图像}};}

(4)打包APP,然后安装在手机即可(虚拟器一般跑不出来哦,需要手机测试)

会弹出成功标志,然后点击locate即可调到APP打包好的文件.

3.实验结果

Android开发手机相机应用相关推荐

  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. 【转】PHP foreach 小结
  2. 即将毕业的你,做好当一个社会人的准备了吗?
  3. 2020CCPC(长春) - Combination Lock(二分图博弈)
  4. python2读取excel中文处理,【Python】【源码】利用Python读取Excel文件-续
  5. Ms SQL Server 约束和规则
  6. 关于codeforces加载慢
  7. 高考还没结束,这份试卷已经流出,你能拿多少分?
  8. Java 实现固定长度队列,自动删除最早添加的数据
  9. 语音合成论文与韩国小哥“撞车”后续:英伟达“赶紧”把代码开源了
  10. 执行Linux脚本出错,出现No Such file or directory异常
  11. 神经网络与深度学习2
  12. linux 显示目录的大小不一样,linux目录大小显示不实时问题
  13. 现代通信原理思维导图--第二章 确知信号
  14. html5 如何打包成apk,将H5封装成android应用APK文件的几种方法
  15. 七款好看文字样式纯css
  16. Legion 一款网络渗透工具
  17. Mac 电脑 插显示器 提示:显示器不支持当前的输入时序,解决办法
  18. Linux基础加实际操作演示
  19. vue2 + tinymce 包含自定义图片上传及视频、音频上传
  20. java工程师主要是做什么的?我来聊聊如何提高自身的工作水平

热门文章

  1. 读书笔记- 韩鹏杰 -《道德经》
  2. 打造黑苹果(三)COMS(BIOS)设置
  3. 多普达系列 内存不足如何处理
  4. hfss天线方向图导入matlab,MATLAB在天线方向图中应用和研究.PDF
  5. html中可编辑的表格控件,Editable DataGrid(可编辑表格)
  6. MSYS2快速配置C++环境+ZSH
  7. 8051单片机的通信方式有多少种
  8. Uboot中lpddr4的初始化(i.MX8M)
  9. uni-app使用uni-ui
  10. 大国权力竞争如何引发了技术革命