Intereting Posts

Звук затвора камеры андроида отключен?

Я использую это

camera.takePicture(null, rawCallback, jpegCallback);

Но с некоторыми устройствами он производит звук, когда камера захватывает изображение.

Пожалуйста, помогите, как я могу отключить звук затвора камеры?

Solutions Collecting From Web of "Звук затвора камеры андроида отключен?"

Для Mute введите этот код перед захватом изображения

  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); 

Вы можете отключить его программно с 4.2 с помощью:

 Camera.CameraInfo info = new Camera.CameraInfo(); Camera.getCameraInfo(id, info); if (info.canDisableShutterSound) { mCamera.enableShutterSound(false); } 

Используйте ниже двух строк перед нажатием кнопки

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

И эти два звука сразу после захвата изображения:

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

Я знаю только это решение, и я лично использовал его в своей заявке

Как упоминалось в харизме, это невозможно сделать на некоторых устройствах, поскольку на некоторых рынках (например, в Японии) существуют законодательные требования, при которых изображение всегда приводит к слышимому звуку затвора.

Тип потока, используемый для этих типов звуков, – STREAM_SYSTEM_ENFORCED , и есть системное свойство только для чтения, которое определяет, можно ли отключить такой поток.

Ну, все эти решения хороши, но я предпочитаю устанавливать громкость на 0 (и не только систему, так как некоторые устройства используют другие потоки, а затем система и / или не все потоки включают систему):

Smth, как это будет работать безупречно:

 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(); } 

И сохранить, восстановить и установитьMuteAll что-то вроде этого:

 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); } } } 

Не забудьте воспользоваться исключениями. Я удалил их для лучшей подсветки.