2012-02-10 31 views
4

我的Android应用程序需要支持Android平台2.1.x(即Android API级别7)。当我的应用程序开始播放媒体时,我需要使用​​和abandonAudioFocus()方法暂停其他应用程序(例如音乐),并在应用程序停止后继续播放。Android API级别7中的requestAudioFocus是否有任何等效函数?

但是,这两个功能仅适用于API级别8及以上。 API级别7的等效函数是什么?或者在API级别8之前如何做到这一点?

+3

我找到了答案,在http://stackoverflow.com/questions/1993471/android-can-i-mute-currently-播放音频的应用程序 – user1201995 2012-02-10 14:38:58

回答

1

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

Android上的音频处理是在一段时间内会变得非常糟糕。这些API非常奇怪,文档记录不完善,并且在版本之间不断变化/不赞成/中断。即使是AudioManager代码也有FIXMEs。

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

SDK确实允许您将单个流类型设置为独奏 - 使所有其他流都被静音 - 但我不相信您可以识别特定应用程序正在播放的音频并以某种方式暂停/取消暂停它。一般情况下,音乐应用程序将使用PhoneStateListener在来电时暂停自己。

因此,对于您的情况,您可以为您的MediaPlayer“借用”电话流并使用方法调用AudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL ,true)开始播放,然后在播放或​​活动完成时取消单独播放流。

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

也许您可以使用其他流类型而不是语音呼叫,但我只是从使用扬声器或听筒进行音频播放的应用程序开始工作,这需要使用语音通话流。

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

相关问题