我使用AudioManager类实现了调用,在本文档:https://developer.android.com/guide/topics/media-apps/audio-focus中提到了这一点。当我打电话时,我可以看到音频管理器资源被占用:
audioManager.requestAudioFocus(audioFocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
但是音频管理器资源不会通过调用:
audioManager.abandonAudioFocus(audioFocusChangeListener);
此外,如上文所述文件所述:
对于以Android5.0 (API 21)为目标的应用程序,音频应用程序应该使用AudioAttributes来描述应用程序正在播放的音频类型。例如,播放语音的应用程序应该指定CONTENT_TYPE_SPEECH。
但是在AudioManager类函数中,使用AudioAttributes调用被标记为下面提到的SystemApi:
@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()之间的设备应该调用哪个函数呢?
发布于 2019-11-07 13:56:10
音频管理器资源没有发布
那是什么意思?你怎么看出来的?
( a)如果你请求AUDIOFOCUS_GAIN
,然后放弃它,那么就会保持沉默。
例如,我在听应用程序A的音乐,然后我开始听应用程序B的音乐,然后暂停它。应用程序A不会自动开始播放,这很好。这就是暂时焦点的区别。
AUDIOFOCUS_GAIN
)。当你放弃专注时,你有责任停止播放。
如果您放弃焦点,继续播放,您将不再参与音频焦点机制。如果我启动了另一个音乐播放器,而不是你的应用程序,系统将无法停止您的应用程序的播放,当我的另一个音乐播放器要求音频焦点。
当您完成播放时,请调用
abandonAudioFocus()
。
来源:安卓8.0前的音频焦点
设备L-O应该调用哪个函数?
唯一可用的AudioManager.STREAM_*
常量之一,如安卓8.0前的音频焦点中提到的。
// 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
,它可以在MediaPlayer
、SoundPool.Builder
和所有其他播放声音的东西上使用。
https://stackoverflow.com/questions/58756837
复制相似问题