Camera前后摄像头同时预览

闲来无事写的,简单的Demo,不足之处请见谅。

PS:有的手机不支持同时打开前后摄像头。

添加权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.microphone"/>

mainactivity.java

public class MainActivity extends Activity implements OnErrorListener, OnInfoListener {
private SurfaceView sfv1;
private SurfaceView sfv2;
private Button btn;
private Button btn1;
private Camera mcamera = null;
private SurfaceHolder mSurfaceHolder;
private SurfaceHolder mSurfaceHolder1;

private boolean bool;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

this.mContext = super.getBaseContext();

sfv1 = (SurfaceView) findViewById(R.id.sfv1);
sfv2 = (SurfaceView) findViewById(R.id.sfv2);
btn = (Button) findViewById(R.id.btn);
btn1 = (Button) findViewById(R.id.btn1);

this.mSurfaceHolder = this.sfv1.getHolder();
this.mSurfaceHolder.addCallback(new SurfaceHolder.Callback() {

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
Camera mcamera = Camera.open(0);
mcamera.setDisplayOrientation(90);
try {
mcamera.setPreviewDisplay(mSurfaceHolder);
mcamera.startPreview();
return;
} catch (IOException localIOException) {
localIOException.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
this.mSurfaceHolder.setType(3);

this.mSurfaceHolder1 = this.sfv2.getHolder();
this.mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() {

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
Camera mcamera = Camera.open(1);
mcamera.setDisplayOrientation(90);
try {
mcamera.setPreviewDisplay(mSurfaceHolder1);
mcamera.startPreview();
return;
} catch (IOException localIOException) {
localIOException.printStackTrace();
}
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
});
this.mSurfaceHolder1.setType(3);

Log.d("lyb", "btn onclick");
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
//startVideoRecording();
}

});

btn1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {

//stopVideoRecording();

});

}

activity_main.xml

<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" >

<SurfaceView
android:id="@+id/sfv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

<SurfaceView
android:id="@+id/sfv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />

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

<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="start" />

<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="stop" />
</LinearLayout>

</LinearLayout>

至于后续前后摄像头同时拍照录像怎么实现,欢迎大家分享交流。

时间: 2024-08-01 22:46:41

Camera前后摄像头同时预览的相关文章

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

杂家前文是在2012年的除夕之夜仓促完成,后来很多人指出了一些问题,琐事缠身一直没有进行升级.后来随着我自己的使用,越来越发现不出个升级版的demo是不行了.有时候就连我自己用这个demo测一些性能.功能点,用着都不顺手.当初代码是在linux下写的,弄到windows里下全是乱码.还要自己改几分钟才能改好.另外,很多人说不能正常预览,原因是我在布局里把Surfaceview的尺寸写死了.再有就是initCamera()的时候设参数失败,直接黑屏退出,原因也是我把预览尺寸和照片尺寸写死了.再有就

surfaceView和Camera配合进行摄像头的预览

首先是Camera类,在5.0上已经被废弃,不推荐使用但还是支持的.最新的是Camera2类,我还没有研究,据说用法完全不一样,反正也是一个坑跳入另外一个坑. 上面是简介和需要的权限,记得加上权限. 步骤在下面图里: 说了大体的流程去使用这个类,三个标important的条目,按照步骤走就好.需要注意的就是第5条,Pass a fully initialized SurfaceHolder,需要一个已经完全初始化完毕的surface,也就是你需要等surface初始化完毕之后才能调用setPre

Android 实例讲解自定义Camera拍照和预览以及前后置摄像头切换

上一篇博文讲解了怎么去调用本地图片和调用系统拍照图片(http://blog.csdn.net/a123demi/article/details/40003695)的功能. 而本博文将通过实例实现自定义Camera的功效.具体功能如下: 1.实现自定义Camera拍照: 2.实现前后置摄像头的切换: 3.实现Camera拍照后图片缩小显示以及正常预览: 4.实现Camera拍照后图片保存: 在具体实现代码之前,我们先来了解一下Android api对实现自定义Camera的介绍. 根据api的介

Android自定义照相机 预览拍照 切换前后置摄像头

Android提供了Camera来控制拍照,步骤如下:(1)调用Camera的open()方法打开相机.(2)调用Camera的getParameters()获取拍照参数,该方法返回一个Cmera.Parameters对象.(3)调用Camera.Parameters对象对照相的参数进行设置.(4)调用Camera的setParameters(),并将Camera.Parameters对象作为参数传入,这样就可以对拍照进行参数控制,Android2.3.3以后不用设置.(5)调用Camerade

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摄像头预览,预览界面上呈现矩形框,在

android通过camera和surfaceview选择摄像头并即时预览

在使用android设备的摄像头的时候我们有两种选择: 1.调用intent方法使用摄像头 2.通过camera类使用摄像头 第一种方法非常方便,不过需要跳到新的activity中,这样的用户体验并不是特别好 使用camera能有更大的自定义空间! 使用camera就需要用surfaceview显示摄像头的即时画面 我们这样设置layout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu

ffmpeg实现mjpeg摄像头的采集-预览-拍照

摄像头输出是mjpeg格式的,需要实现在线预览功能,然后实现拍照功能 1.可以设置采集图像的分辨率,预览分辨率为640*480,可以自定义 2.ctrl+\ 拍照,ctrl+c 退出 void test() { if (signal(SIGQUIT, sigHandle) == SIG_ERR) { perror("set signal err"); } if (signal(SIGINT, sigHandle) == SIG_ERR) { perror("set signa

关于降低android手机摄像头预览分辨率

假设现在有这样一个需求需要一直开着手机摄像头 但是不做任何拍照动作 但是每个手机的相机分辨率都不同 而默认预览的时候参数是最大分辨率 这样有时候就回导致电量损耗的加快 所以我们可以采取降低相机分辨率的方法 这样既达到了目标 又节省了电量 1 package com.example.camerbatterytest; 2 3 4 import java.io.IOException; 5 import java.util.List; 6 7 import android.app.Activity;

MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\mediatek\config\project**\ 该文件中配置了当前项目中使用的硬件芯片等信息 //如这个是指收音机所使用的芯片信息 CUSTOM_HAL_FMRADIO = mt6628 //下面这个是指当前项目所采用的 ROM 芯片CUSTOM_HAL_EEPROM=IMX111OTP_EE