Android 禁用相机快门声音,AudioManager在三星不工作
我禁用了相机快门,声音如下:Android 禁用相机快门声音,AudioManager在三星不工作,android,android-camera,android-audiomanager,Android,Android Camera,Android Audiomanager,我禁用了相机快门,声音如下: 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(Aud
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上进行了测试,快门声音始终处于最大值。当我在应用程序之外完全禁用系统设置中的所有声音时,快门声音仍然存在。
此外,如果我在应用程序中使用上面的代码片段禁用快门声音,则在三星设备上会播放快门声音
我尝试将所有标志静音:
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: 我添加了以下代码,以检查上面的代码段是否正在更改任何内容:
int streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);
mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
Boolean volumeFixed = mgr.isVolumeFixed();
streamMuted = mgr.getStreamVolume(AudioManager.STREAM_SYSTEM);
这里的输出是STREAM_系统在开始时有StreamVolume“6”,然后我将这个流静音。之后,我将检查设备是否实现了固定卷策略,这是“false”。
再次检查StreamVolume后,其值为“0”
因此,快门声音是否具有完全不同的音频流,即使我使用默认的系统摄像头,也可以通过静音系统声音设置来禁用快门声音?快门声音可能取决于硬件/制造商。在某些Android版本/ROM中,无法禁用快门声音。您可以在拍照前尝试启用“请勿打扰”模式,但不能保证它能正常工作 更新 在拍照之前,可以尝试其他三种解决方案:
- 静音隐藏的“AudioManager.STREAM\u SYSTEM\u ENFORCED”流类型(使用反射)
- 设置“AudioManager.SetSpakerPhone开启(错误)”
- 使用隐藏的“android.media.AudioSystem.setDeviceConnectionState()”暂时禁用扬声器(请注意,此过程将为所有android系统关闭扬声器,因此,如果管理不当,并且在完成后未很好地恢复到以前的值,则非常危险)
- 静音隐藏的“AudioManager.STREAM\u SYSTEM\u ENFORCED”流类型(使用反射)
- 设置“AudioManager.SetSpakerPhone开启(错误)”
- 使用隐藏的“android.media.AudioSystem.setDeviceConnectionState()”暂时禁用扬声器(请注意,此过程将为所有android系统关闭扬声器,因此,如果管理不当,并且在完成后未很好地恢复到以前的值,则非常危险)
把这个放进你的舱单里
我尝试在系统设置中激活DND模式。打开应用程序并拍摄照片->快门声音响亮清晰。谢谢你的主意!我编辑了对其他三种可能的解决方案的回答,以尝试;)好建议。非常感谢。我设法使快门静音,通过反射调用STREAM_SYSTEM_强制流,尽管无法使用adjustStreamVolume或setStreamMute执行此操作,因此我不得不使用setStreamVolume,这相当混乱,因为流的激活不知怎的有问题。最后,我成功地实现了预期的行为。我尝试在systemsettings中激活DND模式。打开应用程序并拍摄照片->快门声音响亮清晰。谢谢你的主意!我编辑了对其他三种可能的解决方案的回答,以尝试;)好建议。非常感谢。我设法使快门静音,通过反射调用STREAM_SYSTEM_强制流,尽管无法使用adjustStreamVolume或setStreamMute执行此操作,因此我不得不使用setStreamVolume,这相当混乱,因为流的激活不知怎的有问题。最后,我成功地完成了所需的行为。就像所有其他权限一样。但这并没有改变任何事情。事实上,当我在应用程序中第一次尝试打开相机时,会有人问我是否愿意授予对相机的访问权限。但是当调用上面的代码时,我不会被请求权限。我在AndroidManifest.xml中添加了这行代码。就像所有其他权限一样。但这并没有改变任何事情。事实上,当我在应用程序中第一次尝试打开相机时,会有人问我是否愿意授予对相机的访问权限。但是,当上面的代码被调用时,我不会被要求获得许可。你如何调用摄像机?如果你使用intent(),你已经放弃了所有的控制权。你怎么称呼摄像机?如果使用intent(),则已放弃所有控制权。
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />