gpt4 book ai didi

android - 状态改变时如何关闭MediaRecorder播放的声音

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:56:52 25 4
gpt4 key购买 nike

我的 Android 应用程序在 SurfaceHolder 上使用 MediaRecorder 来显示相机正在捕获的内容的实时预览。每次用户按下应用程序上的 REC 按钮时,应用程序就会开始录制。每次 MediaRecorder 的状态切换到“开始”或从“开始”切换时,Android 都会自动(?)发出哔声。这种蜂鸣声因手机而异,这让我认为这种蜂鸣声本身与 MediaRecorder 的状态变化有关。如果手机音量设置为静音,则不会播放提示音。

我用谷歌搜索并做了一些研究,但找不到关闭此提示音的方法。可能吗?如果是,怎么办?

该应用已在以下平台上测试:Nexus One 2.3.4、Desire HD 2.3.3

最佳答案

好的,接受的答案对我不起作用。在运行 4.2.1 (Jelly Bean) 的 Galaxy Nexus 上,当通过 MediaRecorder 录制时,我需要使用 AudioManager.STREAM_RING,因为 AudiManager.STREAM_SYSTEM 不起作用。它总是会在每次录音开始时播放“铃声”。

这是我使用“STREAM_RING”和其他方法的解决方案。

// disable sound when recording.
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_ALARM,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_DTMF,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_MUSIC,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_RING,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_SYSTEM,true);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_VOICE_CALL,true);

// re-enable sound after recording.
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_ALARM,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_DTMF,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_MUSIC,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_RING,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_SYSTEM,false);
((AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE)).setStreamMute(AudioManager.STREAM_VOICE_CALL,false);

也作为documentation状态确保在 onPause() 方法中重新启用音频。

我希望这能帮助那些为这个问题而烦恼的人。这将禁用所有声音流。您可以浏览并找出您特别需要的那些。我发现当 mediarecorder 运行时,不同版本的 android 为 chime 使用不同的流。即,STREAM_RING 适用于 android 4.2.1,但不适用于 ICS。

编辑:正如我在下面的评论中提到的,我无法在 Samsung Galaxy S1 上为 Android OS 2.3.3 禁用声音。有没有人对此有好运?

Darrenp 的解决方案有助于整理代码,但在最近更新我的手机(galaxy nexus android 4.3)时,音量/录音提示音再次响起! user1944526 的解决方案绝对有帮助。为了让它更容易理解......

使用像 ,

// class variables.
Integer oldStreamVolume;
AudioManager audioMgr;


enableSound() {
setMuteAll(false);
if (audioMgr != null && oldStreamVolume != null) {
audioMgr.setStreamVolume(AudioManager.STREAM_RING, oldStreamVolume, 0);
}
}

disableSound() {
audioMgr = (AudioManager)activity.getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
oldStreamVolume = audioMgr.getStreamVolume(AudioManager.STREAM_RING);
audioMgr.setStreamVolume(AudioManager.STREAM_RING, 0, 0);

}

为了每个函数的完整性,您还可以在函数中调用 darrenp 的解决方案,或者包含上述所有 STREAM_ 行。但现在对我来说,这些组合正在发挥作用。希望这对某人有帮助...

关于android - 状态改变时如何关闭MediaRecorder播放的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6804205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com