2012-03-28 2 views
0

나는 하나의 7 인치와 10 인치 .. 두 개의 은하 정제에 대한 사용자 정의 카메라 응용 프로그램과 테스트를 개발하고 있습니다. 10 인치는 위대한하지만 7inch에서 작동, 내가 걸릴 때 사진을 찍으면 카메라 미리보기가 멈추고 logCat은 CAMERA SNAP에서 멈 춥니 다. 내 customcamera 클래스에서 오류없이 클릭하면 내 btn_snap_pic에 로그인했습니다. 응용 프로그램이 그냥 중단됩니다 .. 그리고 만약 내가 그것을 다시 열고 응용 프로그램을 다시 열면 "카메라에 연결 실패"나는 내 응용 프로그램이 얼어 붙어 버렸을 때 나는이 오류가 있다고 가정합니다 카메라, 발표 없었어 .. 어쨌든, 아래에있는 내 내 CustomCamera 클래스 모두 내 CamLayer 내 미리보기입니다 ..사진은 갤럭시 7 인치 탭하지만 10inch 촬영하지 후 동결

public class CustomCamera extends Activity{ 
    String camFace ="back"; 
    FrameLayout frame; 
    RelativeLayout rel; 
    CamLayer camPreview; 

    ImageView btn_snap_pic; 
    ImageView btn_switch_cam; 

    String TAG = "custom cam"; 



    public void onCreate(Bundle savedInstanceState) 
    { 
     Bitmap btnSwitch = BitmapFactory.decodeResource(this.getResources(), 
       R.drawable.btn_switch_camera); 

     Bitmap btnSnap = BitmapFactory.decodeResource(this.getResources(), 
       R.drawable.btn_take_picture); 

     super.onCreate(savedInstanceState); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

      //Set Screen Orientation 
      this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 


      RelativeLayout.LayoutParams buttonS = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

      RelativeLayout.LayoutParams buttonT = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 

      RelativeLayout.LayoutParams cam = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT); 



      cam.addRule(RelativeLayout.BELOW); 
      buttonS.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
      buttonT.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
      buttonT.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

      try{ 

       //Create Intance of Camera 
       camPreview = new CamLayer(this.getApplicationContext(),camFace); 
       //Relative view for everything 
       rel = new RelativeLayout(this); 
       // set as main view 
       setContentView(rel); 
       //FrameLayOut for camera 
       frame = new FrameLayout(this); 

       // add Camera to view 
       frame.setLayoutParams(cam); 
       frame.addView(camPreview); 


       rel.addView(frame); 

       btn_switch_cam = new ImageView (this); 
       btn_switch_cam.setImageBitmap(btnSwitch); 
       btn_switch_cam.setLayoutParams(buttonS); 

       buttonS.rightMargin = 25; 
       buttonS.topMargin = 25; 
       rel.addView(btn_switch_cam); 

       btn_switch_cam.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
         Log.v("CAMERA Switch", "CLICKED"); 
         //frame.removeView(camPreview); 

         if(camFace.equals("front")){ 
          camFace = "back"; 
         }else{ 
          camFace = "front"; 
         } 
         //camPreview.stopCamera(); 
         frame.removeView(camPreview); 
         restartCam(); 
         //camPreview.switchCam(camFace); 
        } 

       }); 

       btn_snap_pic = new ImageView(this); 
       btn_snap_pic.setImageBitmap(btnSnap); 
       btn_snap_pic.setLayoutParams(buttonT); 
       buttonT.rightMargin = 25; 
       buttonT.bottomMargin = 25; 

       rel.addView(btn_snap_pic); 
       btn_snap_pic.setOnClickListener(new View.OnClickListener() { 
        public void onClick(View view) { 
         Log.v("CAMERA Snap", "CLICKED"); 
         camPreview.camera.takePicture(shutterCallback, rawCallback, 
           jpegCallback); 
        } 

       }); 

      } catch(Exception e){} 
     } 

     public void restartCam(){ 
      camPreview = new CamLayer(this.getApplicationContext(),camFace); 
      frame.addView(camPreview); 
     } 


     ShutterCallback shutterCallback = new ShutterCallback() { 
      public void onShutter() { 
       Log.d(TAG, "onShutter'd"); 
      } 
     }; 

     /** Handles data for raw picture */ 
     PictureCallback rawCallback = new PictureCallback() { 
      public void onPictureTaken(byte[] data, android.hardware.Camera camera) { 
       Log.d(TAG, "onPictureTaken - raw"); 
      } 

     }; 

     /** Handles data for jpeg picture */ 
     PictureCallback jpegCallback = new PictureCallback() { 
      public void onPictureTaken(byte[] data, android.hardware.Camera camera) { 
       FileOutputStream outStream = null; 
       try { 

        outStream = new FileOutputStream(String.format(
          "/sdcard/LC/images/%d.jpg", System.currentTimeMillis())); 
        outStream.write(data); 
        outStream.close(); 
        Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } finally { 
       } 
       Log.d(TAG, "onPictureTaken - jpeg"); 
      } 
     }; 
    } 

제품과 CAMLAYER입니다 :

public class CamLayer extends SurfaceView implements SurfaceHolder.Callback { 
     Camera camera; 
     SurfaceHolder previewHolder; 
     String camID; 
     private static final String TAG = "Cam Preview"; 


     public CamLayer(Context context, String facing) 
     { 
       super(context); 
       camID = facing; 
       previewHolder = this.getHolder(); 
       previewHolder.addCallback(this); 
       previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 


     } 
     public void surfaceCreated(SurfaceHolder holder) { 
      startCamera(); 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
     { 
       Parameters params = camera.getParameters(); 
       //params.setPreviewSize(width, height); 
        //params.setPictureFormat(PixelFormat.JPEG); 
        camera.setParameters(params); 
        camera.startPreview(); 


     } 

     public void surfaceDestroyed(SurfaceHolder arg0) 
     { 
       //camera.stopPreview(); 
       //camera.release(); 
      stopCamera(); 
     } 



     public void onResume() { 
       //camera.startPreview(); 
      startCamera(); 

     } 

     public void onPause() { 
      // TODO Auto-generated method stub 
      //camera.stopPreview(); 
      stopCamera(); 
     } 

     public void switchCam(String newCamId) { 
      /*camera.stopPreview(); 
      //camera.release(); 

      if(camID.equals("front")){ 
       camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
      }else{ 
       camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
      }*/ 
      //camera.startPreview(); 
      //camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
      stopCamera(); 
      camID = newCamId; 
      startCamera(); 

     } 
     public void stopCamera(){ 
      System.out.println("stopCamera method"); 
      if (camera != null){ 
       camera.stopPreview(); 
       camera.setPreviewCallback(null); 
       camera.release(); 
       camera = null; 
       previewHolder.removeCallback(this); 
       previewHolder = null; 
      } 
     } 

     private void startCamera(){ 
      if(camID.equals("front")){ 
       camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
      }else{ 
       camera=Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK); 
      } 
      try { 
        camera.setPreviewDisplay(previewHolder); 

        camera.setPreviewCallback(new PreviewCallback() { 

        public void onPreviewFrame(byte[] data, Camera arg1) { 
         //FileOutputStream outStream = null; 
         /*try { 
          //outStream = new FileOutputStream(String.format(
            //"/sdcard/%d.jpg", System.currentTimeMillis())); 
          //outStream.write(data); 
          //outStream.close(); 
          Log.d(TAG, "onPreviewFrame - wrote bytes: " 
            + data.length); 
         } catch (FileNotFoundException e) { 
          e.printStackTrace(); 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } finally { 
         }*/ 
         //CamLayer.this.invalidate(); 
        } 
       }); 

       } 
        catch (Throwable e){ Log.w("TAG,", "failed create surface !?!?"); } 
     } 

     public void draw(Canvas canvas) { 
      super.draw(canvas); 
      Paint p = new Paint(Color.RED); 
      Log.d(TAG, "draw"); 
      canvas.drawText("PREVIEW", canvas.getWidth()/2, 
       canvas.getHeight()/2, p); 
     } 
} 

답변