2015-01-11 5 views
1

Я следил за Руководством по стеклу для съемки фотографии, найденной here. Однако это создает новый Intent, который автоматически захватывает изображение без создания предварительного просмотра камеры в окне просмотра Glass.Google Glass: Camera.open() всегда вызывает исключение во время работы

В попытке разрешить пользователь первого просмотра, что камера видит на стекле окно просмотра, я последовал за андроидом руководства разработчика, нашел here, и в итоге врезался в исключение во время выполнения, появляющимся при попытке вызова Camera.open():

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

руководство разработчика обертывания Camera.open() в пункте примерки поймать, но не объясняет, что делать в случае поднимается исключение.

Вот мои вопросы:

  1. Есть ли способ, чтобы увидеть, если любой другой Android процесс/услуга имеет блокировку на камере стекло?
  2. Если да, то как я могу рассказать об этом процессе/услуге, чтобы дать мне камеру?
  3. Возможно, в руководстве разработчика Glass Glass мы связали, есть ли способ, чтобы пользователь мог просмотреть изображение до того, как будет снято изображение?

Спасибо за любую помощь!

+0

'Спасибо за любую помощь!' Разве блок 'try-catch' не распознает, можете ли вы открыть камеру? Если вы не можете открыть его, он должен быть заблокирован другим процессом, тогда улов «называется» ... – Mike

+0

Я это понимаю. Я не понимаю, что на самом деле делать, когда Исключение поймано. Руководство разработчика просто печатает трассировку стека. Как я могу рассказать другим процессам, чтобы дать мне контроль над камерой? Как я могу узнать, что другой процесс контролирует камеру? –

+0

Я думаю (!) - я не уверен, - но у вас не будет силы принуждать другие приложения к выпуску камеры.Но, например, вы можете рассказать пользователю, в чем проблема, и что он должен делать. Для запуска посмотрите [this] (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. ваш код сработает. – njzk2

0

Выяснил это. В моей AndroidManifest.xml, я помещал свои права и пожелания под application вместо непосредственно под manifest:

До:

<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"> 
Смежные вопросы