2015-01-11 4 views
1

사진을 찍기위한 Glass 가이드를 따라 가본 결과 here입니다. 그러나 이는 Glass 뷰포트에서 카메라 미리보기를 만들지 않고 그림을 자동으로 캡처하는 새로운 인 텐트를 만듭니다. 카메라가 유리 '뷰포트에 보는 것을 먼저 미리보기로 사용자를 허용하는 시도에서 Google Glass : Camera.open()은 항상 런타임 예외를 발생시킵니다.

, 나는, 안드로이드 개발자 가이드를 따라 here을 발견, 결국 Camera.open()를 호출 할 때 발생되는 런타임 예외로 실행 :

java.lang.RuntimeException: Fail to connect to camera service

개발자 가이드는 시도 - 캐치 절에서 Camera.open()를 래핑 그러나 예외가 발생하는 경우에 무엇을 설명하지 않습니다.

여기 내 질문은 :

  1. 다른 안드로이드 프로세스/서비스가 유리 '카메라에 잠금 장치가 있는지 확인하기 위해 어떤 방법이 있나요?
  2. 그렇다면 프로세스/서비스에서 나에게 카메라를 제공하는 방법을 어떻게 알 수 있습니까?
  3. 내가 링크 된 Glass 개발자 가이드에서 아마도 사진을 찍기 전에 사용자가 이미지를 미리 볼 수있는 방법이 있습니까?

어떤 도움을 주셔서 감사합니다!

+0

'도움을 주셔서 감사합니다! '카메라를 열 수 있다면'try-catch' 블록을 감지 할 수있는 방법이 있습니까? 당신이 그것을 열 수 없다면, 그것은 다른 프로세스에 의해 잠겨 져야합니다, 그때 캐치는 "전화"입니다 ... – Mike

+0

나는 그것을 이해합니다. 나는 예외가 잡힐 때 실제로 무엇을해야하는지 이해하지 못합니다. 개발자 가이드는 단순히 스택 추적을 인쇄합니다. 나에게 카메라의 제어권을 다른 프로세스에게 알려주려면 어떻게해야합니까? 어떻게 다른 프로세스가 카메라를 제어 할 수 있는지 알 수 있습니까? –

+0

필자는 (확실하지 않습니다!)하지만 다른 응용 프로그램에서 카메라를 강제로 끌 수있는 권한은 없습니다.그러나 예를 들어 사용자에게 문제가 무엇이고 어떻게해야하는지 알려줄 수 있습니다. 시작을 위해 [이] (http://stackoverflow.com/questions/24155236/android-error-cant-connect-to-the-camara)를 보면 다른 앱이 카메라를 잠근 지 확인하는 패턴을 보여줍니다. . 희망이있다;) – Mike

답변

1

장소 권한을 매니페스트 파일의 애플리케이션 태그

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus"/> 

<application> 
     <activity></activity> 
</application> 

내가 같은 오류가 발생하는 이유는 잘못된 장소에서 사용 권한을 유지! 희망이 당신을 도울 것입니다.

0

camera.open()에 카메라를 가져온 다음 캡처 한 사진을 보여주는 다음 코드 스 니펫을 살펴보십시오.

public class CameraView extends SurfaceView implements SurfaceHolder.Callback 
{ 
      private SurfaceHolder surfaceHolder = null; 
      private Camera camera = null; 

      @SuppressWarnings("deprecation") 
      public CameraView(Context context) 
      { 
       super(context); 
       surfaceHolder = this.getHolder(); 
       surfaceHolder.addCallback(this); 
       surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
      } 

      @Override 
      public void surfaceCreated(SurfaceHolder holder) 
      { 
       camera = Camera.open(); 

       // Set the Hotfix for Google Glass 
       this.setCameraParameters(camera); 

       // Show the Camera display 
       try 
       { 
           camera.setPreviewDisplay(holder); 
       } 
       catch (Exception e) 
       { 
           this.releaseCamera(); 
       } 
      } 

      @Override 
      public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
      { 
       // Start the preview for surfaceChanged 
       if (camera != null) 
       { 
           camera.startPreview(); 
       } 
      } 

      @Override 
      public void surfaceDestroyed(SurfaceHolder holder) 
      { 
       // Do not hold the camera during surfaceDestroyed - view should be gone 
       this.releaseCamera(); 
      } 

      public void setCameraParameters(Camera camera) 
      { 
       if (camera != null) 
       { 
           Parameters parameters = camera.getParameters(); 
           parameters.setPreviewFpsRange(30000, 30000); 
           camera.setParameters(parameters); 
       } 
      } 

      public void releaseCamera() 
      { 
       if (camera != null) 
       { 
           camera.release(); 
           camera = null; 
       } 
      } 
} 

이것은 작동 코드입니다. 자세한 내용은 tutorial을 참조하십시오.

희망이 도움이 될 것입니다!

+0

OP에 따라 예외는 Camera.open을 호출하여 throw됩니다. 귀하의 코드가 충돌합니다. – njzk2

0

알아 냈어. 내 AndroidManifest.xml, 나는 manifest에서 대신 직접의 application에서 내 권한 및 기능 요청을 배치했다 :

하기 전에 :

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.organization"> 

     <application 
      android:name=".MyApp" 
      android:allowBackup="true" 
      android:label="@string/app_name"> 

      <uses-permission android:name="android.permission.CAMERA" /> 
      <uses-feature android:name="android.hardware.Camera" /> 

후 : 위의

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.my.organization"> 

     <uses-permission android:name="android.permission.CAMERA" /> 
     <uses-feature android:name="android.hardware.Camera" /> 

     <application 
      android:name=".MyApp" 
      android:allowBackup="true" 
      android:label="@string/app_name">