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

我不知道将播放什么内容或哪个应用程序将播放它,但我想请他们全部暂停,直到我播放完毕。我知道,这听起来相当大胆,但这一定是可能的,因为当有来电时,基本上就会发生这种情况。

我可以向所有音频播放器发送消息,要求他们暂停一会儿吗?我可以假冒来电吗?只是为了花点时间吗?

谢谢。

有帮助吗?

解决方案

在Android音频处理将是一会儿相当可怕。这些API是非常奇怪的,记录不完整和不断变化/自嘲/版本之间的断裂。即使是AudioManager码具有FIXMEs在它

反正有Android中几个流类型(音乐,通知,电话等)和应用程序是为了选择适当的进行播放。我想大多数Android应用应该使用音乐/媒体类型(STREAM_TYPE_MUSIC)。您使用MediaPlayer方法设置此您setAudioStreamType

在SDK确实允许您设置一个流的键入的独奏 - 导致所有其他流静音 - 但我不相信你可以辨识音频由特定的应用程序和回放不知何故暂停/取消暂停。在一般的音乐应用程序将使用PhoneStateListener暂停自己,当有电话打进来

所以你的情况,你可以“借用”的电话为您MediaPlayer流,并开始播放时所使用的方法调用AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true),然后取消独奏与当播放或您的false完成Activity流。

我可以告诉你,这个工作,但我不记得随便你是否还需要设置音频的模式应用于MODE_IN_CALL使用语音通话流(像这样:AudioManager.setMode(AudioManager.MODE_IN_CALL))时。如果发现是必需的,那么你需要确保你返回模式MODE_NORMAL一旦播放完成,否则当你按音量硬键,它会说“通话音量”!但是,如果当你想变回MODE_NORMAL,你必须检查一个真正的电话是不是在那个时候......

发生

也许你可以使用另一种流类型,而不是语音呼叫的,但我只是从一个应用程序的工作经验,可以请使用免提或耳机的音频播放,其中的来说,需要使用语音呼叫流。

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

其他提示

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

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.setStreamMute(AudioManager.STREAM_MUSIC, true);

笔记: 如果你打电话 setStreamMute(int, 布尔值) 将流静音 n 有时,你必须称呼它 n 再次取消静音(使用 false).

您可以尝试 AudioManager.adjustVolume 方法:

AudioManager audioMan = 
    (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioMan.adjustVolume(AudioManager.ADJUST_LOWER,
    AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top