在Android API级别7中是否有任何与requestAudioFocus相同的功能?
作者:互联网
我的Android应用程序需要支持Android平台2.1.x(Android API等级7).我需要使用requestAudioFocus()和abandonAudioFocus()方法暂停其他应用程序(例如音乐),以便在我的应用程序开始播放媒体时播放,并在应用程序停止后恢复它们.
但是,这两个功能仅适用于API级别8及更高级别. API级别7的等效功能是什么?或者如何在API级别8之前执行此操作?
解决方法:
感谢Christopher(https://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,则必须检查当时没有发生正电话…
也许您可以使用另一种流类型而不是语音呼叫类型,但我只是根据使用可以使用扬声器或耳机进行音频播放的应用程序的经验来讲述,这需要使用语音呼叫流.
就像我说的,音频处理不是特别有趣……;)
标签:android,android-audiomanager 来源: https://codeday.me/bug/20190709/1416583.html