gpt4 book ai didi

android - Android API 级别 7 中是否有 requestAudioFocus 的等效函数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:37 25 4
gpt4 key购买 nike

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

然而,这两个函数仅在 API Level 8 及以上可用。 API 级别 7 的等效功能是什么?或者如何在 API 级别 8 之前执行此操作?

最佳答案

感谢 Christopher (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 确实允许您将单个流类型设置为独奏——导致所有其他流静音——但我不相信您可以识别特定应用程序正在播放的音频并以某种方式暂停/取消暂停它。当有来电时,音乐应用程序通常会使用 PhoneStateListener 暂停自身。

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

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

也许您可以使用另一种流类型而不是语音通话类型,但我只是根据开发应用程序的经验来说,该应用程序可以使用免提电话或听筒进行音频播放,这需要使用语音通话流。

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

关于android - Android API 级别 7 中是否有 requestAudioFocus 的等效函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com