eli*_*ai2 5 android android-camera
我有一个Activity调用另一个有Camera Preview的类.问题是它打开了后置摄像头,我需要前置摄像头.我怎么能在默认情况下这样做才会打开前置摄像头(我看了谷歌,但是当我打开时我试过应用程序崩溃的每一件事).这是活动:
package com.elichai.tfillin;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.widget.FrameLayout;
public class CameraActivity extends Activity {
private Camera mCamera;
private CameraPreview mPreview;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCamera = getCameraInstance();
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e){
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
这是另一个类:
package com.elichai.tfillin;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;
int cameraId=0;
@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.release();
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
mCamera.setDisplayOrientation(90);
if (mHolder.getSurface() == null){
return;
}
try {
mCamera.stopPreview();
} catch (Exception e){
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
}
}
Run Code Online (Sandbox Code Playgroud)
}
Rag*_*ood 10
你的当前Camera.open()没有参数,这意味着它将打开默认的摄像头,几乎总是后面的摄像头.
您应该遍历可用的摄像头并找出正面的ID并使用它打开它.就像是:
private Camera openFrontFacingCamera()
{
int cameraCount = 0;
Camera cam = null;
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 ) {
try {
cam = Camera.open( camIdx );
} catch (RuntimeException e) {
Log.e(TAG, "Camera failed to open: " + e.getLocalizedMessage());
}
}
}
return cam;
}
Run Code Online (Sandbox Code Playgroud)
然后在您的应用中使用它,如下所示:
public static Camera getCameraInstance() {
Camera c = null;
try {
c = openFrontFacingCamera();
}
catch (Exception e){
}
return c;
}
Run Code Online (Sandbox Code Playgroud)
看到所有方法都打开并返回Camera实例,您可以通过直接调用openFrontFacingCamera()而不是简单地简化代码getCameraInstance().
| 归档时间: |
|
| 查看次数: |
11281 次 |
| 最近记录: |