【发布时间】:2021-05-25 18:08:25
【问题描述】:
谁能告诉我如何在 android 中将音频扬声器静音。 我试过了
mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
和
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC,true);
但它不起作用。
【问题讨论】:
标签: android
谁能告诉我如何在 android 中将音频扬声器静音。 我试过了
mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
和
mAudioManager.setStreamMute(AudioManager.STREAM_MUSIC,true);
但它不起作用。
【问题讨论】:
标签: android
基本上你需要知道你计划劫持哪个流,据我听说AudioManager 是错误的。如果您的想法是关闭所有现有的流并只播放您的声音,您可以通过这样做来欺骗其他应用程序发出噪音:
AudioManager.setMode(AudioManager.MODE_IN_CALL);
AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);
然后通过
将其删除AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, false);
AudioManager.setMode(AudioManager.MODE_NORMAL );
或者,你可以通过改变音量来静音:
AudioManager audioManager =
(AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.adjustVolume(AudioManager.ADJUST_LOWER,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
【讨论】:
来自 Lollipop 的 setStreamSolo 已弃用。中间还有另一种方法,但现在在奥利奥上,正确的做法似乎是:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
am.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
.setAudioAttributes(new AudioAttributes.Builder().setUsage(USAGE_VOICE_COMMUNICATION).build()).build());
am.adjustVolume(AudioManager.ADJUST_MUTE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
【讨论】:
初始化:
var originalVolume = 0
private val audioManager: AudioManager by lazy {
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
return@lazy Util.appContext().getSystemService(AudioManager::class.java)
} else {
return@lazy Util.appContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager
}
}
需要静音的地方:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
audioManager.adjustVolume(AudioManager.ADJUST_MUTE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
} else {
originalVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
audioManager.mode = AudioManager.MODE_IN_CALL
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0)
}
需要取消静音的地方:
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
audioManager.adjustVolume(AudioManager.ADJUST_UNMUTE, AudioManager.FLAG_PLAY_SOUND);
} else {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0)
audioManager.mode = AudioManager.MODE_NORMAL
}
【讨论】: