【问题标题】:Disable Camera Shutter Sound, AudioManager not working in Samsung禁用相机快门声音,AudioManager 在三星中不起作用
【发布时间】:2018-07-18 01:23:43
【问题描述】:

我像这样禁用了相机快门声音:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
     mgr.setStreamVolume(AudioManager.STREAM_SYSTEM,0,0);
     mgr.adjustStreamVolume(AudioManager.STREAM_SYSTEM,AudioManager.ADJUST_MUTE, 0);
 } else {
     mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
}

这适用于我的大多数测试设备。

如果我的系统范围的声音选项响亮,我可以在我的应用程序设置中禁用和启用快门声音。

我在三星 A3(2016) 和三星 S7 上测试过,快门声音总是开到最大。当我在应用程序之外的系统设置中完全静音时 - 仍然存在快门声音。 此外,如果我在应用程序内部使用代码 sn-p 禁用快门声音,则在三星设备上会播放快门声音。

我尝试将所有标志静音:

int streams = AudioManager.STREAM_ALARM|
              AudioManager.STREAM_DTMF|
              AudioManager.STREAM_MUSIC|     
              AudioManager.STREAM_NOTIFICATION|
              AudioManager.STREAM_RING|
              AudioManager.STREAM_SYSTEM|
              AudioManager.STREAM_VOICE_CALL; 

mgr.adjustVolume(AudioManager.ADJUST_MUTE, streams);

还是一样的结果。

谁能告诉我,我在这里缺少什么?三星是否使用某种不同的音频流?


编辑 1: 我添加了以下代码,以检查上面的代码 sn-p 是否发生任何变化:

int streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);

mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);

Boolean volumeFixed = mgr.isVolumeFixed();
streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);

这里的输出是 STREAM_SYSTEM 在开始时有 StreamVolume '6',然后我正在静音这个 Stream。之后,我正在检查设备是否实施了固定音量策略,即“假”。 再次检查 StreamVolume 后,它的值为“0”。

难道快门声音有完全不同的AudioStream,即使我使用默认系统摄像头,也可以通过静音系统声音设置来禁用快门声音?

【问题讨论】:

标签: android android-camera android-audiomanager


【解决方案1】:

快门声音可能取决于硬件/制造商。在某些 Android 版本/ROM 中,无法禁用快门声音。您可以在拍照前尝试启用“请勿打扰”模式,但不能保证效果很好。

更新

在拍照之前可以尝试其他三种解决方案:

  • 静音隐藏的“AudioManager.STREAM_SYSTEM_ENFORCED”流类型(使用反射)
  • 设置“AudioManager.setSpeakerphoneOn(false)”
  • 使用隐藏的“android.media.AudioSystem.setDeviceConnectionState()”暂时禁用扬声器(请注意,此过程会将所有 ANDROID 系统的扬声器设置为关闭,因此如果管理不善,然后又不能很好地恢复到完成时的前一个值)

【讨论】:

  • 我尝试在系统设置中激活免打扰模式。打开我的应用程序并拍摄照片 -> 快门声音响亮而清晰。感谢这个想法!
  • 我编辑了我对其他三种可能的解决方案的回答;)
  • 好建议。谢谢你。我设法通过反射使调用 STREAM_SYSTEM_ENFORCED 流的快门静音,尽管使用 adjustStreamVolume 或 setStreamMute 无法做到这一点,因此我不得不使用 setStreamVolume,这很混乱,因为然后流的激活不知何故是错误的。最后,我设法完成了所需的行为。
【解决方案2】:

把它放到你的清单中

  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

【讨论】:

  • 我在我的 AndroidManifest.xml 中添加了这行代码。就像所有其他权限一样。但这并没有改变任何东西。实际上,当我第一次尝试在应用程序中打开我的相机时,系统会询问我是否要授予对相机的访问权限。但是当调用上面的代码时,我没有被要求获得许可。
猜你喜欢
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多