간단한 카메라 예제를 써보고 있는데 자꾸 실행이 안되네요 ...


일단 소스들입니다;ㅠ

---------------------------java------------------------

package com.cam_preview;


import java.io.File;

import java.io.FileOutputStream;

import java.util.List;


import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.hardware.Camera;

import android.hardware.Camera.AutoFocusCallback;

import android.hardware.Camera.PictureCallback;

import android.hardware.Camera.Size;

import android.net.Uri;

import android.os.Bundle;

import android.os.Environment;

import android.util.AttributeSet;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;


public class Camera_preview extends Activity {

    /** Called when the activity is first created. */

Cam_Surface surf;

    Camera cam;

    Button mShutter;

    

    AutoFocusCallback focusing = new AutoFocusCallback(){


public void onAutoFocus(boolean success, Camera camera) {

mShutter.setEnabled(success);

}

    };

    

    PictureCallback pic_type = new PictureCallback() {


public void onPictureTaken(byte[] data, Camera camera) {

String sd = Environment.getExternalStorageDirectory().getAbsolutePath();

String path = sd+ "/picture1.png";

File file = new File(path);

try{

FileOutputStream fos = new FileOutputStream(file);

fos.write(data);

fos.flush();

fos.close();

}catch(Exception e){

Toast.makeText(Camera_preview.this, "에러발생", 0).show();

return;

}

Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

Uri uri = Uri.parse("file://"+path);

intent.setData(uri);

sendBroadcast(intent);

Toast.makeText(Camera_preview.this, "succes", Toast.LENGTH_SHORT).show();

surf.cam.startPreview();

}

    };

    

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        

        surf = (Cam_Surface)findViewById(R.id.preview);

        

        findViewById(R.id.focus).setOnClickListener(new Button.OnClickListener() {

       

public void onClick(View v){

        mShutter.setEnabled(false);

        surf.cam.autoFocus(focusing);

        }

        });

        

        mShutter = (Button)findViewById(R.id.shutter);

        mShutter.setOnClickListener(new Button.OnClickListener() {


public void onClick(View v) {

surf.cam.takePicture(null, null, pic_type);

}

       

        });

    }

    

    

}


class Cam_Surface extends SurfaceView implements SurfaceHolder.Callback{


SurfaceHolder surf_Holder;

Camera cam;

public Cam_Surface(Context context, AttributeSet attrs) {

super(context,attrs);

surf_Holder=getHolder();

surf_Holder.addCallback(this);

surf_Holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

// TODO Auto-generated constructor stub

}


public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

cam = Camera.open();//카메라 열기

try{

cam.setPreviewDisplay(surf_Holder);

}catch(Exception e){

cam.release();

cam = null;

}

}


public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

if(cam != null){

cam.release();

cam.stopPreview();

cam=null;

}

}


public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

Camera.Parameters params = cam.getParameters();

List<Size> img_Size = params.getSupportedPreviewSizes();

if(img_Size == null){

params.setPreviewSize(width, height);//set:실행명령

}else{

int diff = 10000;

Size opti=null;

for(Size s:img_Size){

if(Math.abs(s.height-height)<diff){

diff = Math.abs(s.height-height);

opti = s;

}

}

params.setPreviewSize(opti.width, opti.height);

}

cam.setParameters(params);

cam.startPreview();

}

}


--------------------main.xml-------------------------------------


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >


    <LinearLayout

        android:id="@+id/linearLayout1"

        android:layout_width="match_parent"

        android:layout_height="wrap_content" >


        <Button

            android:id="@+id/shutter"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="shutter" />


        <Button

            android:id="@+id/focus"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:text="focus" />


    </LinearLayout>



    <FrameLayout

        android:id="@+id/frameLayout1"

        android:layout_width="match_parent"

        android:layout_height="match_parent" >



        <SurfaceView

            android:id="@+id/preview"

            android:layout_width="match_parent"

            android:layout_height="match_parent" />


    </FrameLayout>


</LinearLayout>


-------------------------------------log---------------------------------


03-24 01:33:34.020: W/KeyCharacterMap(333): No keyboard for id 0

03-24 01:33:34.020: W/KeyCharacterMap(333): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

03-24 02:00:13.320: D/AndroidRuntime(937): Shutting down VM

03-24 02:00:13.331: W/dalvikvm(937): threadid=1: thread exiting with uncaught exception (group=0x40015560)

03-24 02:00:13.331: E/AndroidRuntime(937): FATAL EXCEPTION: main

03-24 02:00:13.331: E/AndroidRuntime(937): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.cam_preview/com.cam_preview.Camera_preview}: java.lang.ClassCastException: android.view.SurfaceView

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread.access$1500(ActivityThread.java:117)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.os.Handler.dispatchMessage(Handler.java:99)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.os.Looper.loop(Looper.java:123)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread.main(ActivityThread.java:3683)

03-24 02:00:13.331: E/AndroidRuntime(937): at java.lang.reflect.Method.invokeNative(Native Method)

03-24 02:00:13.331: E/AndroidRuntime(937): at java.lang.reflect.Method.invoke(Method.java:507)

03-24 02:00:13.331: E/AndroidRuntime(937): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)

03-24 02:00:13.331: E/AndroidRuntime(937): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

03-24 02:00:13.331: E/AndroidRuntime(937): at dalvik.system.NativeStart.main(Native Method)

03-24 02:00:13.331: E/AndroidRuntime(937): Caused by: java.lang.ClassCastException: android.view.SurfaceView

03-24 02:00:13.331: E/AndroidRuntime(937): at com.cam_preview.Camera_preview.onCreate(Camera_preview.java:70)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)

03-24 02:00:13.331: E/AndroidRuntime(937): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)

03-24 02:00:13.331: E/AndroidRuntime(937): ... 11 more

03-24 02:00:16.620: I/Process(937): Sending signal. PID: 937 SIG: 9



-----------------------------------------------------------

공부 초반이라. 어떻게 물어야할지도 모르겠고 막막하네요 ㅠ