package com.naver.AdnroidCameraSwitch;
import java.io.IOException;
import java.util.List;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class AndroidCameraSwitchActivity extends Activity {
/** Called when the activity is first created. */
private SurfaceView preView = null;
private SurfaceHolder preViewHolder = null;
private Camera camera = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initPreView();
initCamera();
((Button)findViewById(R.id.switchButton)).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
cameraSwitch();
}
});
}
public void initPreView()
{
preView = (SurfaceView)findViewById(R.id.CamerasurfaceView);
preViewHolder = preView.getHolder();
preViewHolder.addCallback(CreateSurfaceHolder());
preViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void initCamera()
{
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
camera.startPreview();
}
public void cameraSwitch()
{
if(camera != null)
{
camera.stopPreview();
preViewHolder.addCallback(null);
camera.release();
camera = null;
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
camera.startPreview();
}
}
public SurfaceHolder.Callback CreateSurfaceHolder()
{
SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
// no-op -- wait until surfaceChanged()
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int a = 0;
a = a+ 1;
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSuppertedSizes = parameters.getSupportedPreviewSizes();
Camera.Size previewSize = previewSuppertedSizes.get(0);
parameters.setPreviewSize(previewSize.width,previewSize.height);
camera.setParameters(parameters);
camera.startPreview();
int a = 0;
a = a+ 1;
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
};
return surfaceCallback;
}
}
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<SurfaceView
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:id="@+id/CamerasurfaceView"/>
<Button android:layout_width="300dip"
android:layout_height="300dip"
android:id="@+id/switchButton"/>
</FrameLayout >
위와 같이 코딩을 하였습니다 .처음 시작할때는 카메라 프리뷰가 보입니다 하지만 cameraSwitch()함수를 호출하여 프리뷰 화면이 정지 상태에 있습니다. 이유는 제 생각에는 surfaceCreated,surfaceChanged 함수들이 호출이 안되는 문제 인것같습니다, 어떻게 하면 surfaceCreated,surfaceChanged를 함수를 호출되게 할수있을까요?