2012-05-26 2 views
0

여러 페이지에 게시 된 것처럼 카메라 액세스를 구현하려고했습니다.android에서 카메라에 액세스

여기에 코드

package view; 
import R; 
import android.app.Activity; 
import android.hardware.Camera; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.FrameLayout; 
public class doInspectionImage extends Activity{ 
private cameraPreview csv; 
private Camera cam; 
private String rid; 
public void onCreate(Bundle is){ 
    super.onCreate(is); 
    this.rid = getIntent().getStringExtra("reportid"); 
    setContentView(R.layout.spectware_view_takepicture); 
    csv = new cameraPreview(this); 
    FrameLayout preview = (FrameLayout)findViewById(R.id.picturepreview); 
    preview.addView(csv); 
    Button takeAPicture = (Button)findViewById(R.id.takePicture); 
    takeAPicture.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
      cam = csv.getCamera(); 
      addText(); 
     } 
    }); 
} 
public void onPause(){ 
    super.onPause(); 
    csv.CameraDisable(); 
} 
public void onResume(){ 
    super.onResume(); 
    csv = new cameraPreview(this); 
    FrameLayout preview = (FrameLayout)findViewById(R.id.picturepreview); 
    preview.addView(csv); 
    Button takeAPicture = (Button)findViewById(R.id.takePicture); 
    takeAPicture.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
      cam = csv.getCamera(); 
      addText(); 
     } 
    }); 
} 
private void addText(){ 
    setContentView(R.layout.spectware_view_picturetext); 
    Button storePic = (Button)findViewById(R.id.storepicture); 
    storePic.setOnClickListener(new OnClickListener(){ 
     public void onClick(View v) { 
      EditText dt = (EditText)findViewById(R.id.picturetext); 
      storePicture(dt.getText().toString()); 
      finish(); 
     } 
    }); 
} 
private void storePicture(String txt){ 
    cam.takePicture(null,null,new model.camera.Camera(rid,txt)); 
} 
} 

패키지보기입니다;

import java.io.IOException; 

import android.content.Context; 
import android.hardware.Camera; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class cameraPreview extends SurfaceView implements SurfaceHolder.Callback{ 
private SurfaceHolder holder; 
private Camera camera; 
public cameraPreview(Context context){ 
    super(context); 
    this.holder = this.getHolder(); 
    this.holder.addCallback(this); 
    this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 
public void surfaceCreated(SurfaceHolder holder){ 
     try{ 
      //Open the Camera in preview mode 
      this.camera = Camera.open(); 
      this.camera.setPreviewDisplay(this.holder); 
     } 
     catch(IOException ioe) 
     { 
       ioe.printStackTrace(System.out); 
     } 
} 
public void CameraEnable(SurfaceHolder holder){ 
    try{ 
     //Open the Camera in preview mode 
     this.camera = Camera.open(); 
     this.camera.setPreviewDisplay(this.holder); 
    } 
    catch(IOException ioe) 
    { 
      ioe.printStackTrace(System.out); 
    } 
} 
public void CameraDisable(){ 
    this.camera.release(); 
} 
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     // Now that the size is known, set up the camera parameters and begin 
     // the preview. 
     Camera.Parameters parameters = camera.getParameters(); 
     parameters.setPreviewSize(width, height); 
     camera.setParameters(parameters); 
     camera.startPreview(); 
} 
public void surfaceDestroyed(SurfaceHolder holder){ 
     // Surface will be destroyed when replaced with a new screen 
     //Always make sure to release the Camera instance 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
} 
public Camera getCamera(){ 
     return this.camera; 
} 
public void onPause(){ 

} 
} 

는 최대한 빨리

Intent i = new Intent(); 
i.setClass(l,doInspectionImage.class); 
i.putExtra("reportid",l.inspection_id); 
startActivity(i); 

으로이 활동을 시작하면 나는 로거에이 메시지가 : 내가 최대한 가까이 샘플에 stiked

05-26 02:35:12.550: W/dalvikvm(8300): threadid=1: thread exiting with uncaught exception (group=0x4001e578) 
    05-26 02:35:12.600: E/AndroidRuntime(8300): FATAL EXCEPTION: main 
    05-26 02:35:12.600: E/AndroidRuntime(8300): java.lang.RuntimeException: Fail to connect to camera service 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.hardware.Camera.native_setup(Native Method) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.hardware.Camera.<init>(Camera.java:300) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.hardware.Camera.open(Camera.java:275) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at view.cameraPreview.surfaceCreated(cameraPreview.java:22) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.SurfaceView.updateWindow(SurfaceView.java:569) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.SurfaceView.updateWindow(SurfaceView.java:407) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.SurfaceView.dispatchDraw(SurfaceView.java:352) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.View.draw(View.java:6936) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.widget.FrameLayout.draw(FrameLayout.java:357) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1646) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.drawChild(ViewGroup.java:1644) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.View.draw(View.java:6936) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.widget.FrameLayout.draw(FrameLayout.java:357) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1917) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewRoot.draw(ViewRoot.java:1530) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1266) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1868) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.os.Handler.dispatchMessage(Handler.java:99) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.os.Looper.loop(Looper.java:130) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at android.app.ActivityThread.main(ActivityThread.java:3691) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at java.lang.reflect.Method.invokeNative(Native Method) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at java.lang.reflect.Method.invoke(Method.java:507) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
    05-26 02:35:12.600: E/AndroidRuntime(8300):  at dalvik.system.NativeStart.main(Native Method) 

. 내가 다른 것을했는지 모르겠다. 그 목적을 바꾸기 위해 내가해야만했던 변화 외에도. 도움에 감사드립니다. 내가 뒤로 버튼을 클릭하면

크리스

P.S는 : 나는 미리보기를 얻을. 하지만 그 후 앱이 다운됩니다.

답변

0

두 가지 매니페스트

  1. 확인 카메라 권한을 확인합니다. 추가되었는지 확인하십시오.

  2. 카메라 자원을 적절하게 해제해야합니다 (onPause의 stopreview).

+0

@fuelfox - 귀하의 편집본을 보았지만 잘 작성되었지만 현재 답변이 충분하지 않다고 생각하면이 답변을 편집하지 말고 직접 작성하십시오. –

관련 문제