간단한 카메라 예제를 써보고 있는데 자꾸 실행이 안되네요 ...
일단 소스들입니다;ㅠ
---------------------------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




에러 메시지대로 Casting을 잘못하신것 아닌지...
XML에서는 SurfaceView인데, 그걸 Cam_Surface로 캐스팅하면 오류가 나겠죠.