如题. 需要直接调用原生相机的前置摄像头, 而不是通过自定义的方式.
网上有两种方式
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1);
// 调用前置摄像头
startActivityForResult(intent, 1);和Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);这两种方法依然打开的是后置的摄像头. 里边的参数不管换成0, 1, 2 都不好使. 求指点, 急求!
网上有两种方式
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("android.intent.extras.CAMERA_FACING_FRONT", 1);
// 调用前置摄像头
startActivityForResult(intent, 1);和Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);这两种方法依然打开的是后置的摄像头. 里边的参数不管换成0, 1, 2 都不好使. 求指点, 急求!
int cameraCount = Camera.getNumberOfCameras();
for(int camIdx = 0;camIdx<cameraCount;camIdx++){
Camera.getCameraInfo(camIdx,cameraInfo);
if(cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT){
mCamera = Camera.open(camIdx);
}
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("android.intent.extras.CAMERA_FACING", 1); // 调用前置摄像头
intent.putExtra("autofocus", true); // 自动对焦
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);
你好. 这个方法试过了, 但是执行Camera.open(camldx)之后, 没有任何反应, LOG日志里也没报任何错误. 有什么想法儿吗?
我的这句:intent.putExtra("android.intent.extras.CAMERA_FACING", 1);望楼主试试,别看错了
还有. 用我这种方法写的话, 是调的原生的相机吧? 如果是的话, 那么不需要使用surfaceview之类的吧? int cameraCount = 0;
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
cameraCount = Camera.getNumberOfCameras();
for (int camIdx = 0; camIdx < cameraCount; camIdx++) {
Camera.getCameraInfo(camIdx, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
if(camera != null) {
camera.release();
camera = null;
}
try {
camera = Camera.open(camIdx);
} catch (RuntimeException e) {
e.getLocalizedMessage();
}
}
}但是现在就是open方法也执行了, 相机就是没有打开. 求各位指点!
不过, 难道只能通过自定义的方式吗? 郁闷了。 自定义的我老是设置不好前置摄像头的宽高比。 你看你给我发的那个是图样有点压扁了, 我之前自定义过一个,是头像拉长了。
我这里倒是有一个自定义的DEMO,别人写的, 它的前置摄像头倒是比例正常。要不您抽空给看一下? 它封装的太到位, 我看着太费劲,有点缕不过来………………
您留个邮箱QQ啥的我发你, 可以呗?
上一种方法在新的SDK中被弃用了
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("camerasensortype", 2); // 调用前置摄像头
//intent.putExtra("autofocus", true); // 自动对焦 去掉这句吧
intent.putExtra("fullScreen", false); // 全屏
intent.putExtra("showActionIcons", false);
startActivityForResult(intent, 1);再试下?
感谢大神支招!
用两部手机亲测了下, 注掉自动对焦那一行, 调出来的依然是后置摄像头。而且LOG里也没报什么错。真心无奈了。
可以阅读一下官方文档:https://developer.android.com/reference/android/hardware/Camera.html
虽然Camera在API 21已经废弃,但是还是可以查询的到,目前大多数项目应该也是用的1楼的方法。
随便写了下,贴一下代码吧。
final SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceview);
findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int numCameras = Camera.getNumberOfCameras();
if (numCameras == 0) {
return;
} Camera.CameraInfo selectedCameraInfo = null;
int index;
index = 0;
while (index < numCameras) {
Camera.CameraInfo cameraInfo = new Camera.CameraInfo();
Camera.getCameraInfo(index, cameraInfo);
if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
selectedCameraInfo = cameraInfo;
break;
}
index++;
} Camera camera;
if (index < numCameras) {
camera = Camera.open(index);
} else {
camera = Camera.open(0);
selectedCameraInfo = new Camera.CameraInfo();
Camera.getCameraInfo(0, selectedCameraInfo);
} if (camera == null) {
return ;
} else {
try {
camera.setPreviewDisplay(surfaceView.getHolder());
} catch (IOException e) {
e.printStackTrace();
}
camera.startPreview();
}
}
});
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /> <Button
android:id="@+id/button1"
android:layout_gravity="center_horizontal"
android:layout_width="100dp"
android:layout_height="50dp"
android:text="打开摄像头"/> <SurfaceView
android:id="@+id/surfaceview"
android:layout_width="match_parent"
android:layout_height="match_parent" /></LinearLayout>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />希望能帮助你们~
最后依然没有找到能直接调用系统前置摄像头的方法.
最后还是自己自定义了一个相机.
关于自定义相机, 网上应该有差不多的DEMO,这里就不码代码了.
谢谢各位!