中关村在线

首页 排行 新品 问答 下载 论坛 手机 笔记本 数码相机 主板 显卡 平板电脑 更多

android Camera 怎么判断当前使用的摄像头是前置还是后置

举报
讨论回答 (5)
mo86858
dsawscqrolga
745400982
a4221520
Ansel_babe
现在 android 平台的智能手机一般都标配有两颗摄像头。在 Camera 中都存在摄像头切换的功能。
并且有一些功能前后置摄像头上会有所不同。譬如人脸检测,人脸识别,自动对焦,闪光灯等功能,
如果前置摄像头的像素太低,不支持该功能的话,就需要在前置摄像头上关掉该 feature.

那么是如何判断并切换前后置摄像头的呢?
我们先来看下 CameraInfo 这个类,

[java] view plaincopy
/**
* Information about a camera
*/
public static class CameraInfo {
/**
* The facing of the camera is opposite to that of the screen.
*/
public static final int CAMERA_FACING_BACK = 0;

/**
* The facing of the camera is the same as that of the screen.
*/
public static final int CAMERA_FACING_FRONT = 1;

/**
* The direction that the camera faces. It should be
* CAMERA_FACING_BACK or CAMERA_FACING_FRONT.
*/
public int facing;

/**
* <p>The orientation of the camera image. The value is the angle that the
* camera image needs to be rotated clockwise so it shows correctly on
* the display in its natural orientation. It should be 0, 90, 180, or 270.</p>
*
* <p>For example, suppose a device has a naturally tall screen. The
* back-facing camera sensor is mounted in landscape. You are looking at
* the screen. If the top side of the camera sensor is aligned with the
* right edge of the screen in natural orientation, the value should be
* 90. If the top side of a front-facing camera sensor is aligned with
* the right of the screen, the value should be 270.</p>
*
* @see #setDisplayOrientation(int)
* @see Parameters#setRotation(int)
* @see Parameters#setPreviewSize(int, int)
* @see Parameters#setPictureSize(int, int)
* @see Parameters#setJpegThumbnailSize(int, int)
*/
public int orientation;
};

见名知义,它就是一个 Camera 信息类。它是通过与屏幕的方向是否一致来定义前后置摄像头的。

与屏幕方向相反即为 BACK_FACING_CAMERA
与屏幕方向一致即为 FRONT_FACING_CAMERA
那么在代码中我们是如何获取当前使用的 CamerInfo 呢

[java] view plaincopy
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId, info);
当然,使用该代码的前提是要 import android.hardware.Camera.CameraInfo;

判断使用是前置还是后置摄像头,可以通过if (info.facing == CameraInfo.CAMERA_FACING_FRONT) 来判断。
当Camera 的实例已经创建了的情况下,则需要通过如下方式来判断。

[java] view plaincopy
CameraInfo info = CameraHolder.instance().getCameraInfo()[mCameraId];
if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
//stopFaceDetection();
}

也可以通过 if(mCameraId == CameraInfo.CAMERA_FACING_FRONT) 来判断。
其中 mCameraId 是当前使用的 CameraId, 一般前置为1, 后置为 0。
展开查看全部 5 条讨论
相关问题

Android 8.0系统什么时候正式推出?

2188 浏览 51 回答

Android劫持病毒是怎么回事?

1436 浏览 19 回答

现在iOS比Android还有优势吗?

1629 浏览 17 回答

高中水平学android开发还是Java编程?哪个更容易些?

869 浏览 11 回答

5月8日,Android P(9.0)就要发布了,你的手机都是哪个版本?为什么国内手机系统升级慢?

670 浏览 8 回答

扩展阅读

moto X50 Ultra评测:AI加持随手一拍都高级

评论 51

moto X50 Ultra评测:AI加持随手一拍都高级

vivo S19系列影像玩法:自带补光灯、让AI帮你修图

评论 11

vivo S19系列影像玩法:自带补光灯、让AI帮你修图

入选首批护眼推荐产品,荣耀凭什么获得行业认可?

评论 11

入选首批护眼推荐产品,荣耀凭什么获得行业认可?

多焦段记录自然美景 vivo X100 Ultra新西兰实拍图赏

评论 0

多焦段记录自然美景 vivo X100 Ultra新西兰实拍图赏

vivo S19 Pro性能测试,国风美学与旗舰性能结合

评论 11

vivo S19 Pro性能测试,国风美学与旗舰性能结合
热门问题

xvdevios安卓安装包旧版

2 浏览 4 回答

xvdevios安卓安装包旧版

微信客户服务电话95188人工时间?

2 浏览 3 回答

微信客户服务电话95188人工时间?

格力空调客户服务电话人工服务24小时

2 浏览 2 回答

格力空调客户服务电话人工服务24小时

2022芝麻分800以上全国多少人

2 浏览 3 回答

2022芝麻分800以上全国多少人

wps怎么设置文字行间距20磅,我找不到在哪里设置?

2 浏览 6 回答

wps怎么设置文字行间距20磅,我找不到在哪里设置?

苹果怎么打开apk 苹果怎么打开apk

2 浏览 6 回答

苹果怎么打开apk 苹果怎么打开apk

电脑突然显示你的电脑遇到问题,需要重新启动,我们只收集是怎么回事_百

2 浏览 4 回答

电脑突然显示你的电脑遇到问题,需要重新启动,我们只收集是怎么回事_百

樱花漫画官方网站入口是什么?

2 浏览 3 回答

樱花漫画官方网站入口是什么?

我的微信群被人举报了,肿么可以查到是谁举报的?

2 浏览 8 回答

我的微信群被人举报了,肿么可以查到是谁举报的?

Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ这些数字在电脑键盘上怎么打出来

2 浏览 10 回答

Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ Ⅺ Ⅻ这些数字在电脑键盘上怎么打出来
最新问答

wps的excel表格忘记保存了怎么处理

3991 浏览 10 回答

wps的excel表格忘记保存了怎么处理

电脑本地连接上了,有发送数据包,但接受是0;该怎样设置,谢谢

1.9万 浏览 5 回答

电脑本地连接上了,有发送数据包,但接受是0;该怎样设置,谢谢

excel图表水平坐标的文字怎么换行

2316 浏览 3 回答

excel图表水平坐标的文字怎么换行

玩DOTA2(刀塔2)玩的好好的突然进程里头蹦出这个程序gameoverlayui.exe 请问怎么删除

1.1万 浏览 8 回答

玩DOTA2(刀塔2)玩的好好的突然进程里头蹦出这个程序gameoverlayui.exe 请问怎么删除

惠普笔记本F1~F12肿么关掉来自功能

4012 浏览 4 回答

惠普笔记本F1~F12肿么关掉来自功能
举报
举报成功

经过核实后将会做出处理,感谢您为社区和谐做出贡献。

请选择删除原因
删除成功
确定推荐该回答?
推荐成功

更多频道

频道导航
辅助工具