android相机预览

android访问相机使用的是Camera.open 来返回一个Camera对象,设置好显示的视图后,调用Camera的预览功能函数 startPreview,停止预览函数是 stopPreview!

activity_mail.xml布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.ssln.camera.MainActivity" >

    <VideoView
        android:id="@+id/videoView1"
        android:layout_width="match_parent"
        android:layout_height="300dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打开" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭" />

    </LinearLayout>

</LinearLayout>

MainActivity.java

package com.ssln.camera;

import java.io.IOException;

import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.VideoView;

public class MainActivity extends Activity implements OnClickListener {

    private Camera myCamra; // 相机
    private VideoView video; // 显示
    private Button btnOpen, btnClose;
    private boolean isPreview=false;    //是否预览
    private SurfaceHolder holder;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        video = (VideoView) findViewById(R.id.videoView1);
        btnOpen = (Button) findViewById(R.id.button1);
        btnClose = (Button) findViewById(R.id.button2);
        btnOpen.setOnClickListener(this);
        btnClose.setOnClickListener(this);
        holder=video.getHolder();
    }

    @Override
    public void onClick(View v) {
        if (v == btnOpen) {
            initCamera();
        } else if (v == btnClose) {
            if(myCamra!=null && isPreview){
                myCamra.stopPreview();//停止预览
                myCamra.release();      //释放资源
                myCamra=null;
                isPreview=false;
            }
        }

    }

    /**
     * 初始化相机
     */
    private void initCamera(){
        if(!isPreview)
        {
            myCamra=Camera.open();    //打开相机设备
        }
        if(myCamra!=null && !isPreview)
        {
            try {
                myCamra.setPreviewDisplay(holder);
                myCamra.startPreview();//开始预览
            } catch (IOException e) {
                e.printStackTrace();
            }
            isPreview=true;
        }

    }
}

访问相机是需要权限的,记得加上

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ssln.camera"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
    <!-- 相机访问权限 -->
    <uses-permission android:name="android.permission.CAMERA"/>

<!-- 加下下面两句,否则会出现 Fail to connect to camera service. 错误 -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

效果预览

时间: 2024-11-08 20:13:25

android相机预览的相关文章

Android Camera API/Camera2 API 相机预览及滤镜、贴纸等处理

Android Lollipop 增加了Camera2 API,并将原来的Camera API标记为废弃了.相对原来的Camera API来说,Camera2是重新定义的相机 API,也重构了相机 API 的架构.初看之下,可能会感觉Camera2使用起来比Camera要复杂,然而使用过后,你也许就会喜欢上使用Camera2了.无论是Camera还是Camera2,当相机遇到OpenGL就比较好玩了. 问题及思路 Camera的预览比较常见的是使用SurfaceHolder来预览,Camera2

Android Camera预览过程数据流浅析

硬件平台:Atmel SAMA5D3 SoC + OV2640 Camera Sensor Android版本:4.2.2 mediaserver进程是Camera Service的容器进程,它会动态加载Camera HAL和Gralloc HAL. 视频数据帧首先必须从Camera驱动程序到达Camera硬件抽象层. 在Camera硬件抽象层,视频数据帧被从video capture buffer拷贝到gralloc buffer. surfaceflinger进程作为显示服务器会动态加载HW

ios7.1后setting中没有开启相机服务应用程序相机预览黑屏问题

if ( [[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0){                                //check whether the permission open for user in settings                AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMedia

android xml预览问题

1.当加入EditText组件后不能预览 ,android sdk的platform版本可能是4.4,4.4是不支持EditText控件的,更新sdk的platform 2.选择的版本与sdk版本  不对应.

使用AVCaptureSession显示相机预览

#import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface ViewController : UIViewController @property (nonatomic,strong) AVCaptureSession * captureSession; @property (nonatomic,strong) AVCaptureDeviceInput * videoInput; @end - (

WebRTC中Android Demo中的摄像头从采集到预览流程

APPRTC-Demo调用流程 1.CallActivity#onCreate 执行startCall开始连接或创建房间 2.WebSocketClient#connectToRoom 请求一次服务器 3.回调到CallActivity#onConnectToRoom 开始创建对等连接,同时将视频采集对象,本地和远程的VideoSink,相关参数传入 localProxyVideoSink代理本地视频渲染器 remoteSinks是代理远程视频的渲染器,这里是一个集合 videoCapture是

【Android源码解析】--选择多张图片上传多图预览

最近做了选择多图并且上传服务器,在网上找了一些demo,适当的做了一下调整,用过了不能忘记,记下来以后还能多看看,本人觉得自己的博客有些渣渣,还希望大家不要介意啊,哪里有错误希望大家及时指正. 好了下面具体的分析一下:(想要做出功能,需求分析是必不可少的,需求.逻辑弄懂了再上手写代码,思路会很清晰的) 1.多图上传首先得选择图片(这里项目需求是既可以拍照上传也可以从相册中选择) 2.拍照上传很简单了网上也有很多例子,调用照相机,返回uri,获取图片 3.从相册中选择图片 3.1 获取手机中的所有

Android实现本地图片选择及预览缩放效果仿春雨医生

在做项目时经常会遇到选择本地图片的需求,以前都是懒得写直接调用系统方法来选择图片,但是这样并不能实现多选效果,最近又遇到了,所以还是写一个demo好了,以后也方便使用.还是首先来看看效果 显示的图片使用RecyclerView实现的,利用Glide来加载:下面弹出的图片文件夹效果是采用PopupWindow实现,这里比采用PopupWindow更方便,弹出显示的左边图片是这个文件夹里的第一张图片:选中的图片可以进行预览,使用网上一个大神写的来实现的:至于图片的获取是用ContentProvide

Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整(原理:底层SurfaceView+上层绘制ImageView)

Android摄像头:只拍摄SurfaceView预览界面特定区域内容(矩形框)---完整实现(原理:底层SurfaceView+上层绘制ImageView) 分类: Android开发 Android UI2013-05-23 15:04 1600人阅读 评论(1) 收藏 举报 目录(?)[+] http://blog.csdn.net/yanzi1225627/article/details/8580034 最近一直在审视以前做过的东西,关于android摄像头预览,预览界面上呈现矩形框,在