- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 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/
我是 Android 和 Java 的新手。我一直在使用 Android Developer 和其他网站提供的 MediaPlayer 和 AudioManager 示例。 我注意到,对于 reque
我正在构建一个录制和播放视频的应用程序。我想在不影响背景音乐播放的情况下这样做,即如果我开始播放视频,我不想暂停其他应用程序的音频。但是,在 Lollipop 上,当调用私有(private)方法 V
我目前正在为一个培训应用程序实现 AudioHelper,它可以在您的培训类(class)中播放一些励志演讲。所以基本上,如果正在进行演讲,我想避开我的 spotify 音频,以便清楚地听到演讲。对于
我的 Android 应用程序需要支持 Android 平台 2.1.x(即 Android API 级别 7)。我需要使用 requestAudioFocus() 和 abandonAudioFoc
我是一名优秀的程序员,十分优秀!