Android - 我可以将当​​前播放的音频应用程序静音吗?

10 audio android android-audiomanager

嗨,我是新来的.我的自学项目是一个播放音频新闻流的小应用程序.为了有效,应用程序确实需要中断任何当前播放的媒体播放器(例如:Last FM,Imeem,音乐播放器,Spotify等).

我不知道将播放什么或将播放什么应用程序,但我想让他们都暂停,直到我完成.听起来相当大胆,我知道,但它必须是可能的,因为当有来电时,基本上就会发生这种情况.

我可以向所有要求他们暂停一下的音频播放器发送消息吗?我可以欺骗来电,只是花费时间吗?

谢谢.

Chr*_*Orr 18

Android上的音频处理在一段时间内会非常糟糕.API非常奇怪,文档记录很差,并且在版本之间不断变化/弃用/中断.即使AudioManager代码中也包含FIXME.

无论如何,Android中有几种流类型(音乐,通知,电话等),应用程序用于选择适当的播放类型.我想大多数Android应用都应该使用音乐/媒体类型(STREAM_TYPE_MUSIC).您可以MediaPlayer使用该setAudioStreamType方法设置此项.

SDK允许您将单个流类型设置为solo - 导致所有其他流被静音 - 但我不相信您可以识别特定应用程序正在播放的音频,并以某种方式暂停/取消暂停.音乐应用程序通常会PhoneStateListener在呼叫进入时使用它来暂停.

因此,在您的情况下,您可以"借用"您的电话呼叫流MediaPlayerAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true)在播放开始时使用方法调用,然后false在播放或Activity完成后取消独奏流.

我可以告诉你,这个工作,但我不记得随便你是否还需要设置音频模式MODE_IN_CALL使用语音通话流时(是这样的:AudioManager.setMode(AudioManager.MODE_IN_CALL)).如果您发现这是必需的,那么您需要确保将模式返回到MODE_NORMAL播放完成后,否则无论何时按下音量硬键,它都会说"通话音量"!但是,如果您想要更改回来MODE_NORMAL,则必须检查当时没有发生真正的电话...

也许您可以使用另一种流类型而不是语音呼叫类型,但我只是根据使用可以使用扬声器或耳机进行音频播放的应用程序的经验来讲述,这需要使用语音呼叫流.

就像我说的,音频处理不是特别有趣......;)


小智 6

已经2年了.但我希望这可以帮助某人:

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);
Run Code Online (Sandbox Code Playgroud)

注意:如果调用setStreamMute(int,boolean)将流静音n次,则必须再次调用n次以取消静音(使用false).