12

私はこれを使用しています

camera.takePicture(null, rawCallback, jpegCallback);

ただし、一部のデバイスでは、カメラが画像をキャプチャするときに音がします。

カメラのシャッター音をミュートするにはどうすればよいですか?

4

5 に答える 5

12

4.2 以降では、次のようにプログラムでオフにすることができます。

Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(id, info);
if (info.canDisableShutterSound) {
    mCamera.enableShutterSound(false);
}
于 2013-02-18T12:52:07.513 に答える
10

ミュートするには、画像をキャプチャする前にこのコードを配置します

 AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
 mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
 camera.takePicture(null, rawCallback, jpegCallback);

1 秒後、以下のコードを入力してミュートを解除します。

 final Handler handler = new Handler();
 Timer t = new Timer();
 t.schedule(new TimerTask() {
    public void run() {
        handler.post(new Runnable() {
            public void run() {
            AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
            mgr.setStreamMute(AudioManager.STREAM_SYSTEM, false);
                    }
                });
            }
    }, 1000); 
于 2013-01-29T11:07:22.110 に答える
7

ボタンをクリックする前に以下の 2 行を使用

 AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);

そして、画像がキャプチャされた直後のこれらの 2 つのローン:

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mgr.setStreamMute(AudioManager.STREAM_SYSTEM, false);

私はこのソリューションしか知らず、アプリケーションで個人的に使用しました

于 2013-01-23T10:08:10.933 に答える
1

ハリズムが述べたように、これは一部のデバイスでは実行できません。一部の市場 (たとえば日本) では、写真を撮ると常にシャッター音が聞こえるという法的要件があるためです。

これらのタイプのサウンドに使用されるストリーム タイプはSTREAM_SYSTEM_ENFORCEDであり、そのようなストリームをミュートできるかどうかを決定する読み取り専用のシステム プロパティがあります。

于 2013-01-23T10:20:29.417 に答える
0

さて、これらのソリューションはすべて優れていますが、ボリュームを 0 に設定することをお勧めします (システムだけでなく、一部のデバイス ユーザーがシステム以外のストリームを使用している、および/またはすべてのストリームにシステムが含まれているわけではないため)。

このようなものは問題なく動作します:

Camera mCamera = null;

function takePicture() {
   storeSoundSettings();
   setMuteAll(true);
   // init camera and such.
   Camera.CameraInfo info = new Camera.CameraInfo();
   Camera.getCameraInfo(IdOfCameraBackOrFront, info);
       if (info.canDisableShutterSound) {
           camera.enableShutterSound(false);
       }
   setMuteAll(false);
   recoverSoundSettings();
}

そして、次のように保存、回復、setMuteAll します。

int[] streams = new int[]{
                AudioManager.STREAM_ALARM,
                AudioManager.STREAM_DTMF,
                AudioManager.STREAM_MUSIC,
                AudioManager.STREAM_NOTIFICATION,
                AudioManager.STREAM_RING,
                AudioManager.STREAM_SYSTEM,
                AudioManager.STREAM_VOICE_CALL};
JSONObject json;
AudioManager manager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

public void storeSoundSettings() {
        json = new JSONObject();
        json.put("mode", manager.getMode());
        json.put("ringermode", manager.getRingerMode());

        for (int stream : streams) {
            json.put("stream_" + stream, manager.getStreamVolume(stream));
         }
}


public void recoverSoundSettings() {
        json = new JSONObject(readString("last_audio_setting", null));
        manager.setMode(json.getInt("mode"));
        manager.setRingerMode(json.getInt("ringermode"));

        for (int stream : streams) {
            manager.setStreamVolume(stream, json.getInt("stream_" + stream), AudioManager.FLAG_ALLOW_RINGER_MODES);
}

public void setMuteAll(boolean mute) {

    for (int stream : streams) {
        manager.setStreamMute(stream, mute);
        if (mute) {
            manager.setStreamVolume(stream, 100, AudioManager.FLAG_ALLOW_RINGER_MODES);
        } else {
            manager.setStreamVolume(stream, 0, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
        }
    }
}

例外をキャッチすることを忘れないでください。強調表示を改善するためにそれらを削除しました。

于 2014-03-25T14:18:40.773 に答える