質問編集履歴

4 エラーを全て書きますと10000文字オーバーしてしまいますので超え無い限りで書かして頂きました。

fumiya1998_310

fumiya1998_310 score 7

2017/03/06 15:40  投稿

AndroidStudioにてCameraの実装で出てきたCameraManagerクラスのopenCameraのエラーについて
###前提・実現したいこと
androidstudioにてカメラをプレビューするシステムを作っています。
 CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。実行時のエラーです。
```
エラーメッセージ
03-06 15:02:09.131 3199-3228/com.example.camera2test2 E/EGL_emulation: tid 3228: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
![エラーログ全てです](39c6bc145644ae347d6b758ca04d9775.png)                                                                                                                                                                 
3-06 15:02:09.131 3199-3228/com.example.camera2test2 E/EGL_emulation: tid 3228: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
03-06 15:02:09.135 3199-3199/com.example.camera2test2 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.camera2test2, PID: 3199
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)' on a null object reference
                                                                           at com.example.camera2test2.MainActivity$Camera.open(MainActivity.java:163)
                                                                           at com.example.camera2test2.MainActivity$1.onSurfaceTextureAvailable(MainActivity.java:38)
                                                                           at android.view.TextureView.getHardwareLayer(TextureView.java:390)
                                                                           at android.view.TextureView.draw(TextureView.java:339)
                                                                           at
                                                                                                                                                                                                           
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.app.Activity
```
###該当のソースコード
```ここに言語を入力
package com.example.camera2test2;
import android.app.Activity;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.os.Bundle;
import android.os.HandlerThread;
import android.util.Size;
import android.view.Surface;
import android.view.TextureView;
import android.widget.Toast;
import java.util.Collections;
public class MainActivity extends Activity {
   private Camera mCamera;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       TextureView textureView = (TextureView) findViewById(R.id.texture_view);
       textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
           @Override
           public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
               mCamera.open();
           }
           @Override
           public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
           }
           @Override
           public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
               return false;
           }
           @Override
           public void onSurfaceTextureUpdated(SurfaceTexture surface) {
           }
       });
       mCamera = new Camera(textureView);
   }
   class Camera {
       private Activity mActivity;
       private CameraDevice mCamera;
       private TextureView mTextureView;
       private Size mCameraSize;
       private CaptureRequest.Builder mPreviewBuilder;
       private CameraCaptureSession mPreviewSession;
       private CameraDevice.StateCallback mCameraDeviceCallback = new CameraDevice.StateCallback() {
           @Override
           public void onOpened(CameraDevice camera) {
               mCamera = camera;
               createCaptureSession();
           }
           @Override
           public void onDisconnected(CameraDevice camera) {
               camera.close();
               mCamera = null;
           }
           @Override
           public void onError(CameraDevice camera, int i) {
               camera.close();
               mCamera = null;
           }
       };
       CameraCaptureSession.StateCallback mCameraCaptureSessionCallback = new CameraCaptureSession.StateCallback() {
           @Override
           public void onConfigured(CameraCaptureSession Session) {
               mPreviewSession = Session;
               updatePreview();
           }
           @Override
           public void onConfigureFailed(CameraCaptureSession Session) {
               Toast.makeText(MainActivity.this, "onConfigured", Toast.LENGTH_SHORT).show();
           }
       };
       private void updatePreview() {
           mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
           HandlerThread thread = new HandlerThread("CameraPreview");
           thread.start();
           android.os.Handler backgroundHandler = new android.os.Handler(thread.getLooper());
           try {
               mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       private void createCaptureSession() {
           if (!mTextureView.isAvailable()) {
               return;
           }
           SurfaceTexture texture = mTextureView.getSurfaceTexture();//このメソッドは、このビューで使用されるSurfaceTextureを返します。
           texture.setDefaultBufferSize(mCameraSize.getWidth(), mCameraSize.getHeight());
           Surface surface = new Surface(texture);//surfaceクラスは生バッファをスクリーンに映すためのハンドル。
           try {
               mPreviewBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
           mPreviewBuilder.addTarget(surface);//生成したPreviewの出力先SurfaceをaddTargetで加えています。
           try {
               mCamera.createCaptureSession(Collections.singletonList(surface), mCameraCaptureSessionCallback, null);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       public Camera(TextureView textureView) { 
           mTextureView = textureView;
       }
       public void open() {
           try {
               CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE);
               for (String cameraId : manager.getCameraIdList()) {
                   CameraCharacteristics characterristics = manager.getCameraCharacteristics(cameraId);
                   if (characterristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
                       StreamConfigurationMap map = characterristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                       mCameraSize = map.getOutputSizes(SurfaceTexture.class)[0];
                           manager.openCamera(cameraId, mCameraDeviceCallback, null);
                       return;
                   }
               }
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
   }
}
```
AndroidManifest.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.camera2test2">
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-feature android:name="android.hardware.camera.autofocus"/>
   <uses-feature android:name="android.hardware.camera"/>
   <uses-feature android:name="android.hardware.camera2.full"/>
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity"
           android:screenOrientation="landscape" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>
```
activity_main.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.camera2test2.MainActivity">
   <TextureView
       android:id="@+id/texture_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />
</FrameLayout>
```
###試したこと
manager.openCamera(cameraId, mCameraDeviceCallback, null);の部分に例外処理を実装してみましたが、実装してもAndroidEmulatorでカメラを起動できませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Emulatorはapi25のものを使っています。
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    10562 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Emulator

    308 questions

    Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

  • Android Studio

    6803 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

3 エラーログを全て描いたら10000文字オーバーしてしまいましたので書ける範囲で書きました。

fumiya1998_310

fumiya1998_310 score 7

2017/03/06 15:35  投稿

AndroidStudioにてCameraの実装で出てきたCameraManagerクラスのopenCameraのエラーについて
###前提・実現したいこと
androidstudioにてカメラをプレビューするシステムを作っています。
 CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。実行時のエラーです。
```
エラーメッセージ
![実行時のエラーログです] (7b6f55d51a2ebb25f3611f2ddc34dc83.png)  
03-06 15:02:09.131 3199-3228/com.example.camera2test2 E/EGL_emulation: tid 3228: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
03-06 15:02:09.135 3199-3199/com.example.camera2test2 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.camera2test2, PID: 3199
                                                                       java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.app.Activity.getSystemService(java.lang.String)' on a null object reference
                                                                           at com.example.camera2test2.MainActivity$Camera.open(MainActivity.java:163)
                                                                           at com.example.camera2test2.MainActivity$1.onSurfaceTextureAvailable(MainActivity.java:38)
                                                                           at android.view.TextureView.getHardwareLayer(TextureView.java:390)
                                                                           at android.view.TextureView.draw(TextureView.java:339)
                                                                           at
                                                                                                                                                                                                           
```
###該当のソースコード
```ここに言語を入力
package com.example.camera2test2;
import android.app.Activity;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.os.Bundle;
import android.os.HandlerThread;
import android.util.Size;
import android.view.Surface;
import android.view.TextureView;
import android.widget.Toast;
import java.util.Collections;
public class MainActivity extends Activity {
   private Camera mCamera;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       TextureView textureView = (TextureView) findViewById(R.id.texture_view);
       textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
           @Override
           public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
               mCamera.open();
           }
           @Override
           public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
           }
           @Override
           public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
               return false;
           }
           @Override
           public void onSurfaceTextureUpdated(SurfaceTexture surface) {
           }
       });
       mCamera = new Camera(textureView);
   }
   class Camera {
       private Activity mActivity;
       private CameraDevice mCamera;
       private TextureView mTextureView;
       private Size mCameraSize;
       private CaptureRequest.Builder mPreviewBuilder;
       private CameraCaptureSession mPreviewSession;
       private CameraDevice.StateCallback mCameraDeviceCallback = new CameraDevice.StateCallback() {
           @Override
           public void onOpened(CameraDevice camera) {
               mCamera = camera;
               createCaptureSession();
           }
           @Override
           public void onDisconnected(CameraDevice camera) {
               camera.close();
               mCamera = null;
           }
           @Override
           public void onError(CameraDevice camera, int i) {
               camera.close();
               mCamera = null;
           }
       };
       CameraCaptureSession.StateCallback mCameraCaptureSessionCallback = new CameraCaptureSession.StateCallback() {
           @Override
           public void onConfigured(CameraCaptureSession Session) {
               mPreviewSession = Session;
               updatePreview();
           }
           @Override
           public void onConfigureFailed(CameraCaptureSession Session) {
               Toast.makeText(MainActivity.this, "onConfigured", Toast.LENGTH_SHORT).show();
           }
       };
       private void updatePreview() {
           mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
           HandlerThread thread = new HandlerThread("CameraPreview");
           thread.start();
           android.os.Handler backgroundHandler = new android.os.Handler(thread.getLooper());
           try {
               mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       private void createCaptureSession() {
           if (!mTextureView.isAvailable()) {
               return;
           }
           SurfaceTexture texture = mTextureView.getSurfaceTexture();//このメソッドは、このビューで使用されるSurfaceTextureを返します。
           texture.setDefaultBufferSize(mCameraSize.getWidth(), mCameraSize.getHeight());
           Surface surface = new Surface(texture);//surfaceクラスは生バッファをスクリーンに映すためのハンドル。
           try {
               mPreviewBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
           mPreviewBuilder.addTarget(surface);//生成したPreviewの出力先SurfaceをaddTargetで加えています。
           try {
               mCamera.createCaptureSession(Collections.singletonList(surface), mCameraCaptureSessionCallback, null);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       public Camera(TextureView textureView) { 
           mTextureView = textureView;
       }
       public void open() {
           try {
               CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE);
               for (String cameraId : manager.getCameraIdList()) {
                   CameraCharacteristics characterristics = manager.getCameraCharacteristics(cameraId);
                   if (characterristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
                       StreamConfigurationMap map = characterristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                       mCameraSize = map.getOutputSizes(SurfaceTexture.class)[0];
                           manager.openCamera(cameraId, mCameraDeviceCallback, null);
                       return;
                   }
               }
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
   }
}
```
AndroidManifest.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.camera2test2">
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-feature android:name="android.hardware.camera.autofocus"/>
   <uses-feature android:name="android.hardware.camera"/>
   <uses-feature android:name="android.hardware.camera2.full"/>
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity"
           android:screenOrientation="landscape" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>
```
activity_main.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.camera2test2.MainActivity">
   <TextureView
       android:id="@+id/texture_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />
</FrameLayout>
```
###試したこと
manager.openCamera(cameraId, mCameraDeviceCallback, null);の部分に例外処理を実装してみましたが、実装してもAndroidEmulatorでカメラを起動できませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Emulatorはapi25のものを使っています。
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    10562 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Emulator

    308 questions

    Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

  • Android Studio

    6803 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

2 エラーログの追加

fumiya1998_310

fumiya1998_310 score 7

2017/03/06 15:08  投稿

AndroidStudioにてCameraの実装で出てきたCameraManagerクラスのopenCameraのエラーについて
###前提・実現したいこと
androidstudioにてカメラをプレビューするシステムを作っています。
 CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。実行時のエラーです。
```
エラーメッセージ
![イメージ説明](883f2a75aa7e645c8a2e055ef9356107.png)
![実行時のエラーログです] (7b6f55d51a2ebb25f3611f2ddc34dc83.png)
03-06 15:02:09.131 3199-3228/com.example.camera2test2 E/EGL_emulation: tid 3228: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
03-06 15:02:09.135 3199-3199/com.example.camera2test2 E/AndroidRuntime: FATAL EXCEPTION: main
```
###該当のソースコード
```ここに言語を入力
package com.example.camera2test2;
import android.app.Activity;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.os.Bundle;
import android.os.HandlerThread;
import android.util.Size;
import android.view.Surface;
import android.view.TextureView;
import android.widget.Toast;
import java.util.Collections;
public class MainActivity extends Activity {
   private Camera mCamera;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       TextureView textureView = (TextureView) findViewById(R.id.texture_view);
       textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
           @Override
           public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
               mCamera.open();
           }
           @Override
           public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
           }
           @Override
           public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
               return false;
           }
           @Override
           public void onSurfaceTextureUpdated(SurfaceTexture surface) {
           }
       });
       mCamera = new Camera(textureView);
   }
   class Camera {
       private Activity mActivity;
       private CameraDevice mCamera;
       private TextureView mTextureView;
       private Size mCameraSize;
       private CaptureRequest.Builder mPreviewBuilder;
       private CameraCaptureSession mPreviewSession;
       private CameraDevice.StateCallback mCameraDeviceCallback = new CameraDevice.StateCallback() {
           @Override
           public void onOpened(CameraDevice camera) {
               mCamera = camera;
               createCaptureSession();
           }
           @Override
           public void onDisconnected(CameraDevice camera) {
               camera.close();
               mCamera = null;
           }
           @Override
           public void onError(CameraDevice camera, int i) {
               camera.close();
               mCamera = null;
           }
       };
       CameraCaptureSession.StateCallback mCameraCaptureSessionCallback = new CameraCaptureSession.StateCallback() {
           @Override
           public void onConfigured(CameraCaptureSession Session) {
               mPreviewSession = Session;
               updatePreview();
           }
           @Override
           public void onConfigureFailed(CameraCaptureSession Session) {
               Toast.makeText(MainActivity.this, "onConfigured", Toast.LENGTH_SHORT).show();
           }
       };
       private void updatePreview() {
           mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
           HandlerThread thread = new HandlerThread("CameraPreview");
           thread.start();
           android.os.Handler backgroundHandler = new android.os.Handler(thread.getLooper());
           try {
               mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       private void createCaptureSession() {
           if (!mTextureView.isAvailable()) {
               return;
           }
           SurfaceTexture texture = mTextureView.getSurfaceTexture();//このメソッドは、このビューで使用されるSurfaceTextureを返します。
           texture.setDefaultBufferSize(mCameraSize.getWidth(), mCameraSize.getHeight());
           Surface surface = new Surface(texture);//surfaceクラスは生バッファをスクリーンに映すためのハンドル。
           try {
               mPreviewBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
           mPreviewBuilder.addTarget(surface);//生成したPreviewの出力先SurfaceをaddTargetで加えています。
           try {
               mCamera.createCaptureSession(Collections.singletonList(surface), mCameraCaptureSessionCallback, null);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       public Camera(TextureView textureView) { 
           mTextureView = textureView;
       }
       public void open() {
           try {
               CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE);
               for (String cameraId : manager.getCameraIdList()) {
                   CameraCharacteristics characterristics = manager.getCameraCharacteristics(cameraId);
                   if (characterristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
                       StreamConfigurationMap map = characterristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                       mCameraSize = map.getOutputSizes(SurfaceTexture.class)[0];
                           manager.openCamera(cameraId, mCameraDeviceCallback, null);
                       return;
                   }
               }
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
   }
}
```
AndroidManifest.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.camera2test2">
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-feature android:name="android.hardware.camera.autofocus"/>
   <uses-feature android:name="android.hardware.camera"/>
   <uses-feature android:name="android.hardware.camera2.full"/>
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity"
           android:screenOrientation="landscape" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>
```
activity_main.xml
```ここに言語を入力
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.camera2test2.MainActivity">
   <TextureView
       android:id="@+id/texture_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />
</FrameLayout>
```
###試したこと
manager.openCamera(cameraId, mCameraDeviceCallback, null);の部分に例外処理を実装してみましたが、実装してもAndroidEmulatorでカメラを起動できませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Emulatorはapi25のものを使っています。
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    10562 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Emulator

    308 questions

    Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

  • Android Studio

    6803 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1 コードをコード用の記述欄に書き直しました。エラーは実行時のエラーです。

fumiya1998_310

fumiya1998_310 score 7

2017/03/06 14:51  投稿

AndroidStudioにてCameraの実装で出てきたCameraManagerクラスのopenCameraのエラーについて
###前提・実現したいこと
androidstudioにてカメラをプレビューするシステムを作っています。
 CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。
 CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。実行時のエラーです。
```
エラーメッセージ
![イメージ説明](0b9ee25488c6c3812573e87e623420f9.png)
![イメージ説明](883f2a75aa7e645c8a2e055ef9356107.png)
```
###該当のソースコード
MainActivity.java
```ここに言語を入力
package com.example.camera2test2;
import android.app.Activity;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.hardware.camera2.params.StreamConfigurationMap;
import android.os.Bundle;
import android.os.HandlerThread;
import android.util.Size;
import android.view.Surface;
import android.view.TextureView;
import android.widget.Toast;
import java.util.Collections;
public class MainActivity extends Activity {
   private Camera mCamera;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       TextureView textureView = (TextureView) findViewById(R.id.texture_view);
       textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
           @Override
           public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
               mCamera.open();
           }
           @Override
           public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
           }
           @Override
           public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
               return false;
           }
           @Override
           public void onSurfaceTextureUpdated(SurfaceTexture surface) {
           }
       });
       mCamera = new Camera(textureView);
   }
   class Camera {
       private Activity mActivity;
       private CameraDevice mCamera;
       private TextureView mTextureView;
       private Size mCameraSize;
       private CaptureRequest.Builder mPreviewBuilder;
       private CameraCaptureSession mPreviewSession;
       private CameraDevice.StateCallback mCameraDeviceCallback = new CameraDevice.StateCallback() {
           @Override
           public void onOpened(CameraDevice camera) {
               mCamera = camera;
               createCaptureSession();
           }
           @Override
           public void onDisconnected(CameraDevice camera) {
               camera.close();
               mCamera = null;
           }
           @Override
           public void onError(CameraDevice camera, int i) {
               camera.close();
               mCamera = null;
           }
       };
       CameraCaptureSession.StateCallback mCameraCaptureSessionCallback = new CameraCaptureSession.StateCallback() {
           @Override
           public void onConfigured(CameraCaptureSession Session) {
               mPreviewSession = Session;
               updatePreview();
           }
           @Override
           public void onConfigureFailed(CameraCaptureSession Session) {
               Toast.makeText(MainActivity.this, "onConfigured", Toast.LENGTH_SHORT).show();
           }
       };
       private void updatePreview() {
           mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
           HandlerThread thread = new HandlerThread("CameraPreview");
           thread.start();
           android.os.Handler backgroundHandler = new android.os.Handler(thread.getLooper());
           try {
               mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, backgroundHandler);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       private void createCaptureSession() {
           if (!mTextureView.isAvailable()) {
               return;
           }
           SurfaceTexture texture = mTextureView.getSurfaceTexture();//このメソッドは、このビューで使用されるSurfaceTextureを返します。
           texture.setDefaultBufferSize(mCameraSize.getWidth(), mCameraSize.getHeight());
           Surface surface = new Surface(texture);//surfaceクラスは生バッファをスクリーンに映すためのハンドル。
           try {
               mPreviewBuilder = mCamera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
           mPreviewBuilder.addTarget(surface);//生成したPreviewの出力先SurfaceをaddTargetで加えています。
           try {
               mCamera.createCaptureSession(Collections.singletonList(surface), mCameraCaptureSessionCallback, null);
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
       public Camera(TextureView textureView) { 
           mTextureView = textureView;
       }
       public void open() {
           try {
               CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE);
               for (String cameraId : manager.getCameraIdList()) {
                   CameraCharacteristics characterristics = manager.getCameraCharacteristics(cameraId);
                   if (characterristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_BACK) {
                       StreamConfigurationMap map = characterristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                       mCameraSize = map.getOutputSizes(SurfaceTexture.class)[0];
                           manager.openCamera(cameraId, mCameraDeviceCallback, null);
                       return;
                   }
               }
           } catch (CameraAccessException e) {
               e.printStackTrace();
           }
       }
   }
}
```  
AndroidManifest.xml
```ここに言語を入力  
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.camera2test2">
   <uses-permission android:name="android.permission.CAMERA" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
   <uses-feature android:name="android.hardware.camera.autofocus"/>
   <uses-feature android:name="android.hardware.camera"/>
   <uses-feature android:name="android.hardware.camera2.full"/>
   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">
       <activity android:name=".MainActivity"
           android:screenOrientation="landscape" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
   </application>
</manifest>
```  
activity_main.xml
```ここに言語を入力  
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.example.camera2test2.MainActivity">
   <TextureView
       android:id="@+id/texture_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent" />
</FrameLayout>
```  
###試したこと
manager.openCamera(cameraId, mCameraDeviceCallback, null);の部分に例外処理を実装してみましたが、実装してもAndroidEmulatorでカメラを起動できませんでした。
###補足情報(言語/FW/ツール等のバージョンなど)
Emulatorはapi25のものを使っています。
  • Java

    25130 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    10562 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Emulator

    308 questions

    Android EmulatorはアンドロイドのOSで起動しているアンドロイドのデバイスの機能をシミュレートするソフトウェアです。Emulatorは開発者に複数の違う設定を持ったデバイスを必要とすることなくアプリケーションを開発しテストすることが可能になります。

  • Android Studio

    6803 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る