androidのカメラアプリで Camera2 API を使って撮影処理を行っています。
その中で、一部端末では自分で実装しなくても撮影時にシャッター音が鳴るものがあり、そこで自前のシャッター音再生処理を書いてしまうと2重にシャッター音が鳴ってしまいます。
今は以下の通り、カメラデバイスがレガシーの場合は再生しないという判定にしていますが、レガシーデバイスでもシャッター音が鳴らないものがあり、これだと無音カメラになってしまう端末があります。
Java
1private void takePicture() throws CameraAccessException { 2 Log.d(TAG, "takePicture() start."); 3 4 // シャッター音を鳴らす処理 5 // TODO: 判定方法が間違ってる 6 final MediaActionSound shutterSound = new MediaActionSound(); 7 Integer supportedHardwareLevel = mCharacteristics.get( 8 CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL); 9 if (supportedHardwareLevel != null && supportedHardwareLevel == 10 CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) { 11 // カメラデバイスがレガシーの場合、シャッター音は鳴らさない 12 Log.d(TAG, "camera device is legacy. no need to play shutter sound."); 13 } else { 14 Log.d(TAG, "play shutter sound."); 15 shutterSound.play(MediaActionSound.SHUTTER_CLICK); 16 } 17 18 final CaptureRequest.Builder captureBuilder = 19 mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); 20 captureBuilder.addTarget(mImageReader.getSurface()); 21 22 // プレビューと同じCameraRequestパラメータを設定する 23 configurePreviewRequestBuilder(captureBuilder); 24 25 // 画像回転の計算と適用 26 int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); 27 captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation)); 28 29 Log.d(TAG, "takePicture() mSensorOrientation: " + mSensorOrientation); 30 31 // ImageReaderが準備完了したらコールバック処理で撮影する 32 mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { 33 @Override 34 public void onImageAvailable(ImageReader reader) { 35 createResponseBitmap(reader); 36 shutterSound.release(); 37 } 38 }, mHandler); 39 40 mCaptureSession.stopRepeating(); 41 mCaptureSession.capture(captureBuilder.build(), null, null); 42}
現状では、機種ごとに確認してブラックリスト・ホワイトリストを作るという非現実的な方法しか思いつきません。
これについて何かご存知の事などございましたら、ご教授願います。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/29 13:33