2013-03-21 4 views
0

나는 안드로이드 응용 프로그램을 개발 중입니다. 카메라를 사용하여 이미지를 캡처하고 있습니다. 다음 코드를 사용하여 카메라를 엽니 다. 문제는 실행 후 카메라보기가 열리지 않는다는 것입니다. 카메라 = Camera.open (cameraId). "사진 만들기"를 클릭 한 후에 만 ​​카메라 표시등이 열립니다 (여전히 카메라보기가 열리지 않음). 카메라보기를 표시하려면 어떻게해야합니까? MakePhotoActivity.java에서 Android 카메라보기가 열리지 않습니다.

, main.xml에에서

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // do we have a camera? 
     if (!getPackageManager() 
       .hasSystemFeature(PackageManager.FEATURE_CAMERA)) { 
      Toast.makeText(this, "No camera on this device", Toast.LENGTH_LONG) 
        .show(); 
     } else { 
      cameraId = findFrontFacingCamera(); 
      if (cameraId < 0) { 
       Toast.makeText(this, "No front facing camera found.", 
         Toast.LENGTH_LONG).show(); 
      } else { 
       camera = Camera.open(cameraId); 
      } 
     } 
    } 

public void onClick(View view) { 
     camera.takePicture(null, null, 
       new PhotoHandler(getApplicationContext())); 
    } 

,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Button 
     android:id="@+id/captureFront" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:onClick="onClick" 
     android:text="Make Photo" /> 

</RelativeLayout> 
+0

다른 기기에서 사용해 보셨나요? 그것은 당신의 장치 문제가 될 수 –

+0

답장을 보내 주셔서 감사합니다. 나는 에뮬레이터, 안드로이드 타블렛, HTC 모바일도 확인했다. 하지만 카메라보기가 열리지 않습니다. – Manoj

답변

1

이 코드의 도움을합니까?

이것은 앞면을 향한 카메라입니다.

import android.hardware.Camera; 
import android.hardware.Camera.CameraInfo; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Toast; 

public class VideoFragment extends Fragment { 

private static final String TAG = "VideoFragment"; 
private SurfaceView preview; 
private SurfaceHolder previewHolder; 
private Camera camera = null; 
private boolean cameraConfigured = false; 
private boolean inPreview = false; 
private int frontFacingCameraID; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    frontFacingCameraID = findFrontFacingCamera(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.video, container, false); 

    preview = (SurfaceView) view.findViewById(R.id.surfaceView1); 
    previewHolder = preview.getHolder(); 
    previewHolder.addCallback(surfaceCallback); 

    return view; 
} 

private int findFrontFacingCamera() { 
    int cameraId = -1; 
    // Search for the front facing camera 
    int numberOfCameras = Camera.getNumberOfCameras(); 
    for (int i = 0; i < numberOfCameras; i++) { 
     CameraInfo info = new CameraInfo(); 
     Camera.getCameraInfo(i, info); 
     if (info.facing == CameraInfo.CAMERA_FACING_FRONT) { 
      Log.d(TAG, "Camera found"); 
      cameraId = i; 
      break; 
     } 
    } 
    return cameraId; 
} 

@Override 
public void onResume() { 
    super.onResume(); 

    camera = Camera.open(frontFacingCameraID); 
    startPreview(); 
} 

@Override 
public void onPause() { 
    if (inPreview) { 
     camera.stopPreview(); 
    } 

    camera.release(); 
    camera = null; 
    inPreview = false; 

    super.onPause(); 
} 

private SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() { 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // no-op 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // no-op -- wait until surfaceChanged() 
     // TODO understand why this has to be NO-OP 

    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     // TODO understand why these methods have to be called in this 
     // callback method 
     initPreview(width, height); 
     startPreview(); 
    } 
}; 

private void initPreview(int width, int height) { 
    if (camera != null && previewHolder.getSurface() != null) { 
     try { 
      camera.setPreviewDisplay(previewHolder); 
     } catch (Throwable t) { 
      Log.e("PreviewDemo-surfaceCallback", 
        "Exception in setPreviewDisplay()", t); 
      Toast.makeText(getActivity(), t.getMessage(), Toast.LENGTH_LONG) 
        .show(); 
     } 

     if (!cameraConfigured) { 
      Camera.Parameters parameters = camera.getParameters(); 
      Camera.Size size = getBestPreviewSize(width, height, parameters); 

      if (size != null) { 
       parameters.setPreviewSize(size.width, size.height); 
       camera.setParameters(parameters); 
       cameraConfigured = true; 
      } 
     } 
    } 
} 

private void startPreview() { 
    if (cameraConfigured && camera != null) { 
     camera.startPreview(); 
     inPreview = true; 
    } 
} 

private Camera.Size getBestPreviewSize(int width, int height, 
     Camera.Parameters parameters) { 
    Camera.Size result = null; 

    for (Camera.Size size : parameters.getSupportedPreviewSizes()) { 
     if (size.width <= width && size.height <= height) { 
      if (result == null) { 
       result = size; 
      } else { 
       int resultArea = result.width * result.height; 
       int newArea = size.width * size.height; 

       if (newArea > resultArea) { 
        result = size; 
       } 
      } 
     } 
    } 

    return (result); 
} 
} 
+0

답장을 보내 주셔서 감사합니다. 나는이 코드를 사용할 것이다. – Manoj

관련 문제