Camera相机是属于硬件,每台设备的Camera硬件配置的参数都是不一样的,Camera通常是用来拍照,扫描二维码等等

AndroidManifest.xml配置Camera需要的权限:

  <!--
打开相机是很危险的行为,加入权限
-->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.autofocus"/> <!-- 保存图片到sdcard外部存储 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

AndroidManifest.xml配置Activity 横屏显示 + 全屏:

    <!--
设置横屏显示: android:screenOrientation="landscape"
设置无标题+全屏: android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
-->
<activity android:name=".MyCameraActivity"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </activity>

activity_camera.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"> <SurfaceView
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="对焦"
android:layout_alignParentBottom="true"
android:onClick="focus"
/> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="拍照"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:onClick="takepicture"
/> </RelativeLayout>

MyCameraActivity.java

package liudeli.my_media1;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Toast; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream; public class MyCameraActivity extends Activity { private final String TAG = MySurfaceViewActivity.class.getSimpleName(); /**
* 操作的是SurfaceHolder,所以定义全局变量
*/
private SurfaceHolder surfaceHolder; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_camera); // 获取在布局文件中定义的SurfaceView
SurfaceView surfaceView = findViewById(R.id.surface_view); // 不能直接操作SurfaceView,需要通过SurfaceView拿到SurfaceHolder
surfaceHolder = surfaceView.getHolder(); // 使用SurfaceHolder设置屏幕高亮,注意:所有的View都可以设置 设置屏幕高亮
surfaceHolder.setKeepScreenOn(true); // 使用SurfaceHolder设置把画面或缓存 直接显示出来
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); /**
* 由于要观察SurfaceView生命周期,所以需要设置监听
* 此监听不一样,是addCallback
*
*/
surfaceHolder.addCallback(callback);
} /**
* 定义相机对象
*/
private Camera camera; /**
* 定义SurfaceView监听回调
*/
private SurfaceHolder.Callback callback = new SurfaceHolder.Callback() { /**
* SurfaceView被创建了
* @param holder
*/
@Override
public void surfaceCreated(SurfaceHolder holder) {
/**
* 只有在SurfaceView生命周期方法-->SurfaceView被创建后在打开相机
* 以前我在 onResume 之前去打开相机,结果报错了,所以只有在这里打开相机,才是安全

Android-Camera+SurfaceView的更多相关文章

  1. Android Camera+SurfaceView实现自己定义拍照

    对Activity强制横屏,保证预览方向正确. 使用OrientationEventListener监听设备方向.推断竖拍时,旋转照片后再保存.保证竖拍时预览图片和保存后的图片方向一致. 执行效果: ...

  2. 玩转Android Camera开发(一):Surfaceview预览Camera,基础拍照功能完整demo

    杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能. ...

  3. 【Android】Android Camera原始帧格式转换 —— 获取Camera图像(一)

     概述: 做过Android Camera图像采集和处理的朋友们应该都知道,Android手机相机采集的原始帧(RawFrame)默认是横屏格式的,而官方API有没有提供一个设置Camera采集图像的 ...

  4. 玩转Android Camera开发(二):使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  5. android camera setParameters failed 类问题分析总结

    在 monkey test 测试中出现了一例 RuntimeException ,即 setParameters failed. LOG显示为:09-01 18:47:17.348 15656 156 ...

  6. Android Camera 相机程序编写

    Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...

  7. Android Camera 使用小结

    Android手机关于Camera的使用,一是拍照,二是摄像,由于Android提供了强大的组件功能,为此对于在Android手机系统上进行Camera的开发,我们可以使用两类方法:一是借助Inten ...

  8. Android Camera开发:使用TextureView和SurfaceTexture预览Camera 基础拍照demo

    Google自Android4.0出了TextureView,为什么推出呢?就是为了弥补Surfaceview的不足,另外一方面也是为了平衡GlSurfaceView,当然这是本人揣度的.关于Text ...

  9. Android Camera 流程梳理

    毕业已经快两年了,一直没有写博客的习惯,这是第一篇,以后要慢慢养成这个习惯.毕业之后一直在做相机,先简单的梳理下Android Camera的流程. Android Camera 是一个client/ ...

  10. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能

    Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...

随机推荐

  1. VS2015 Git 源代码管理工具使用记录

    1. 首先到源代码托管平台申请个账户:https://git.oschina.net/ 2.创建流程图: 2.1 开始创建项目: 2.2 3. 4.

  2. postman 获取时间戳的方法 和md5加密的方法

    获取时间戳方法: postman.setGlobalVariable("timestamp",Math.round(new Date().getTime()));   这整句是获取 ...

  3. 学习笔记之C++入门到精通(名师教学·手把手教会)【职坐标】_腾讯课堂

    C++入门到精通(名师教学·手把手教会)[职坐标]_腾讯课堂 https://ke.qq.com/course/101465#term_id=100105503 https://github.com/ ...

  4. Appium简介及原理

    1.Appium简介 Appium是一个开源.跨平台的,适用于原生或混合移动应用(hybrid mobile apps)的自动化测试平台.Appium使用WebDriver(JSON wire pro ...

  5. 好记性不如烂笔头-linux学习笔记5mysql主从复制

    mysql主从复制的原理 mysql master服务器,开启bin-log日志,开启IO线程 slave服务器,开启IO线程,开启SQL线程(执行SQL) 1)slave服务器,通过授权用户开启IO ...

  6. OpenMP n 体问题

    ▶ <并行程序设计导论>第六章中讨论了 n 体问题,分别使用了 MPI,Pthreads,OpenMP 来进行实现,这里是 OpenMP 的代码,分为基本算法和简化算法(引力计算量为基本算 ...

  7. layui 弹框

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&q ...

  8. ls 查看时间排序

    1) ls -lt  时间最近的在前面 2) ls -ltr 时间从前到后 3) 利用sort ls -l | sort +7 (日期为第8列)   时间从前到后 ls -l | sort -r +7 ...

  9. UNITY插件信息收集

    2018.8.7 UNITY超级优化神器 : Amplify Impostors

  10. MVC-READ1

    将具有不同稳定性的元素融为一体,具有最差稳定性的元素决定了整体的稳定性,这是“短板理论”在软件设计中的体现. MVC的创建者是Trygve M. H. Reenskau,他是挪威的计算机专家,同时也是 ...