質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

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

Android

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

Android Studio

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

Android Emulator

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

Q&A

解決済

2回答

8967閲覧

AndroidStudioにてCameraの実装で出てきたCameraManagerクラスのopenCameraのエラーについて

fumiya1998_310

総合スコア7

Java

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

Android

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

Android Studio

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

Android Emulator

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

0グッド

0クリップ

投稿2017/03/06 05:27

編集2017/03/06 06:41

###前提・実現したいこと
androidstudioにてカメラをプレビューするシステムを作っています。
CameraManagerClassのopenCameraを実装中に以下のエラーメッセージが発生しました。実行時のエラーです。

エラーメッセージ ![エラーログ全てです](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

###該当のソースコード

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のものを使っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yona

2017/03/06 05:37

実行時エラーなのか、コンパイルエラーなのかを具体的に書いてください。また、コードはコード用の記述に修正してください。
yona

2017/03/06 05:54

実行時のエラーならエラーログを追記してください。
yona

2017/03/06 06:25

エラーログは省略せずに全て記載してください。
guest

回答2

0

ベストアンサー

MainActivityの163行目でヌルポインタが発生していますね。
パーミッションが不足しているため、インスタンスが取得できずにヌルポインタになることはあります。
まずはその行になにが書いてあるかおしえてください。

投稿2017/03/06 06:43

編集2017/03/06 06:43
yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fumiya1998_310

2017/03/06 06:55

CameraManager manager = (CameraManager) mActivity.getSystemService(Context.CAMERA_SERVICE); が記述しています。
yona

2017/03/06 07:03

mActivityがnullですね。 初期化しましょう。
fumiya1998_310

2017/03/06 13:07

ありがとうございます。なんとかできそうです。助かりました。
guest

0

Android 6.0(API レベル 23)以降では、
特定の機能を使用する際、実行時にパーミッションのリクエストを行う必要があります。

今回は、openCameraがその対象となっており、
事前にパーミッションリクエストを行うような処理が行われていないため、警告が出ています。

※警告なのでビルドは通りますが、
設定画面から権限を付与していない場合は、正常に動作しないと思います。

詳しくはこちら
実行時のパーミッション リクエスト

-追記-
mActivity、宣言はしてますが、それからなにもされてませんよ?

投稿2017/03/06 06:15

編集2017/03/06 06:45
abs123

総合スコア1280

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abs123

2017/03/06 06:42 編集

あれ?質問の意味変わってね?心当たりはあるので追記
fumiya1998_310

2017/03/06 13:09

Android6.0からパーミッションリクエストの設定が変わった事を知りませんでした。。。設定したら上手くいきそうです。お手数おかけしましてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問