在Android API级别7中是否有任何与requestAudioFocus相同的功能?

时间:2012-02-10 12:17:30

标签: android android-audiomanager

我的Android应用程序需要支持Android平台2.1.x(Android API等级7)。当我的应用程序开始播放媒体时,我需要使用requestAudioFocus()abandonAudioFocus()方法暂停其他应用程序(例如音乐)播放,并在应用程序停止后恢复它们。

但是,这两个功能仅适用于API等级8及更高版本。 API级别7的等效功能是什么?或者如何在API级别8之前执行此操作?

1 个答案:

答案 0 :(得分:1)

感谢克里斯托弗(http://stackoverflow.com/questions/1993471/android-can-i-mute-currently-playing-audio-applications),我正在引用:

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

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

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

因此,在您的情况下,您可以“借用”MediaPlayer的电话呼叫流,并在播放开始时使用方法调用AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL,true),然后在播放时使用false取消独奏流或你的活动已经完成。

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

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

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