中关村在线

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

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劫持病毒是怎么回事?

1437 浏览 19 回答

现在iOS比Android还有优势吗?

1629 浏览 17 回答

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

869 浏览 11 回答

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

670 浏览 8 回答

热门问题

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

2 浏览 6 回答

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

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

2 浏览 3 回答

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

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

2 浏览 8 回答

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

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

2 浏览 3 回答

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

《西游记》中,孙悟空变成什么水果,被黄眉老佛吃了﹖

2 浏览 6 回答

《西游记》中,孙悟空变成什么水果,被黄眉老佛吃了﹖

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

2 浏览 6 回答

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

虫虫漫画观看页面漫画入口在哪

2 浏览 4 回答

虫虫漫画观看页面漫画入口在哪

求推荐一款笔记本。工科研究生用,便于随身携带。平时做科研,处理数据,查阅文献。不玩网游和单机,至多玩棋牌游戏和影音。喜欢摄影,需要修图。附加:纠结要不要带数字键盘区。预算最多8000。尽量便宜些。

1.2万 浏览 2 回答

求推荐一款笔记本。工科研究生用,便于随身携带。平时做科研,处理数据,查阅文献。不玩网游和单机,至多玩棋牌游戏和影音。喜欢摄影,需要修图。附加:纠结要不要带数字键盘区。预算最多8000。尽量便宜些。

笔记本键盘打斜线怎么打出来的啊?

2 浏览 5 回答

笔记本键盘打斜线怎么打出来的啊?

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

2 浏览 4 回答

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

WPE文件怎么打开?WPE文件怎么打开?WPE文件是什么?WPE用什么打开

3646 浏览 3 回答

WPE文件怎么打开?WPE文件怎么打开?WPE文件是什么?WPE用什么打开

天玑8200和第一代骁龙6哪个更好

1.2万 浏览 8 回答

天玑8200和第一代骁龙6哪个更好

如果突然断电,对SSD的影响大吗?会导致SSD的损伤吗?

8102 浏览 6 回答

如果突然断电,对SSD的影响大吗?会导致SSD的损伤吗?

苹果手机蓝牙如何传照片到电脑

6934 浏览 6 回答

苹果手机蓝牙如何传照片到电脑

GT240-GD5 CF黄金版 TC512M M40 显卡好不好

9207 浏览 3 回答

GT240-GD5 CF黄金版 TC512M M40 显卡好不好
举报
举报成功

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

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

更多频道

频道导航
辅助工具