【今更だけどandroid.hardware.Cameraを使う】システムシャッター音を消す

このエントリーを Google ブックマーク に追加
Pocket
[`yahoo` not found]

android.hardware.Cameraを使うことで、Android端末にあるカメラデバイスにアクセスして使うことができます。
android.hardware.Cameraは、現在では非推奨となっていますがOpenCV等ではまだまだ使われています。

Android端末に実装されているカメラデバイスは固有の性能があります。
そのため、ある端末では出来るのに別の端末では出来ないということが多々あります。
今回はシステムシャッター音を消す方法を説明します。
下記の実装はすべて前回までに作ったクラスを修正しています。
デフォルトではCamera#takePictureを使用するとシステムシャッター音が鳴ります。
しかし、Camera.CameraInfo#canDisableShutterSoundがtrueになるカメラデバイスはシステムシャッター音を消すことができます。
シャッター音を消す方法は二つあります。

Camera#enableShutterSoundで消す

final boolean enableShutterSound(boolean enabled)はシステムシャッター音を消すためのメソッドです。
trueを渡すとシステムシャッター音は鳴り、falseを渡すとシステムシャッター音は鳴りません。
また、このメソッドはシステムシャッター音の有効無効の変更に成功した場合はtrueを返却し、失敗した場合はfalseを返却します。
システムシャッター音を消した場合はCamera.ShutterCallbackでシャッター音を再生することが推奨されています。


    private boolean enableShutterSound;

    public void enableShutterSound(boolean enableShutterSound) {
        this.enableShutterSound = enableShutterSound;
        mCamera.enableShutterSound(enableShutterSound);
    }

    private void startPreview() {
        mCamera = Camera.open(this.cameraId);
        enableShutterSound(false);
        updateCameraParameters();
        try {
            mCamera.setPreviewDisplay(mHolder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.setDisplayOrientation(getCameraDisplayOrientation());
        mCamera.startPreview();
        updateCameraParameters();
    }

Camera#takePictureで消す

システムシャッター音を消すもう一つの方法はCamera#takePictureの第一引数である、Camera.ShutterCallbackにnullを設定するだけです。
この方法が果たして正当な方法かはわかりませんが確かにシャッター音が消えます。


    public void takePicture(){
        mCamera.takePicture(null, mRawPictureCallback , mPostViewPictureCallback , mJpegPictureCallback);
    }

まとめ

今回はシステムシャッター音を消す方法を説明しました。