首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为api级别20以上的android设备请求AudioFocus?

如何为api级别20以上的android设备请求AudioFocus?
EN

Stack Overflow用户
提问于 2019-11-07 21:00:04
回答 1查看 5.3K关注 0票数 2

我使用AudioManager类实现了调用,在本文档:https://developer.android.com/guide/topics/media-apps/audio-focus中提到了这一点。当我打电话时,我可以看到音频管理器资源被占用:

代码语言:javascript
运行
复制
audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

但是音频管理器资源不会通过调用:

代码语言:javascript
运行
复制
audioManager.abandonAudioFocus(audioFocusChangeListener);

此外,如上文所述文件所述:

对于以Android5.0 (API 21)为目标的应用程序,音频应用程序应该使用AudioAttributes来描述应用程序正在播放的音频类型。例如,播放语音的应用程序应该指定CONTENT_TYPE_SPEECH。

但是在AudioManager类函数中,使用AudioAttributes调用被标记为下面提到的SystemApi:

代码语言:javascript
运行
复制
@SystemApi
    @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
    public int requestAudioFocus(OnAudioFocusChangeListener l,
            @NonNull AudioAttributes requestAttributes,
            int durationHint,
            int flags)

那么,APILevel20 (Android )& 26 (Android )到requestAudioFocus()和AbandonAudioFocus()之间的设备应该调用哪个函数呢?

EN

回答 1

Stack Overflow用户

发布于 2019-11-07 21:56:10

音频管理器资源没有发布

那是什么意思?你怎么看出来的?

( a)如果你请求AUDIOFOCUS_GAIN,然后放弃它,那么就会保持沉默。

例如,我在听应用程序A的音乐,然后我开始听应用程序B的音乐,然后暂停它。应用程序A不会自动开始播放,这很好。这就是暂时焦点的区别。

  • 当您计划在可预见的将来播放音频时(例如,在播放音乐时),并且您期望以前的音频焦点持有者停止播放时,请请求永久音频焦点(AUDIOFOCUS_GAIN)。

当你放弃专注时,你有责任停止播放。

如果您放弃焦点,继续播放,您将不再参与音频焦点机制。如果我启动了另一个音乐播放器,而不是你的应用程序,系统将无法停止您的应用程序的播放,当我的另一个音乐播放器要求音频焦点。

当您完成播放时,请调用abandonAudioFocus()

来源:安卓8.0前的音频焦点

设备L-O应该调用哪个函数?

唯一可用的AudioManager.STREAM_*常量之一,如安卓8.0前的音频焦点中提到的。

代码语言:javascript
运行
复制
// Request audio focus for playback
val result: Int = audioManager.requestAudioFocus(
    afChangeListener,
    // Use the music stream.
    AudioManager.STREAM_MUSIC, // There's no AudioAttributes, just the more general constant.
    // Request permanent focus.
    AudioManager.AUDIOFOCUS_GAIN
)

对于以Android5.0 (API 21)为目标的应用程序,音频应用程序应该使用AudioAttributes来描述应用程序正在播放的音频类型。

您提到的引用不是关于requestAudioFocus调用,而是关于setAudioAttributes,它可以在MediaPlayerSoundPool.Builder和所有其他播放声音的东西上使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58756837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档