gpt4 book ai didi

java - Android:MediaPlayer AUDIOFOCUS_LOSS 和 setOnErrorListener() 问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:19 24 4
gpt4 key购买 nike

我正在创建一个音乐播放器应用。

因为我正在检查我的应用程序是否丢失 AudioFocus 然后播放将停止。但这引发了一个问题,即当我播放轨道 - 然后停止它 - 然后再次播放轨道时,switch case AudioManager.AUDIOFOCUS_LOSS 被调用,我在其中停止了播放器注意力不集中。

所以我自己的应用正在失去对自身的关注。显然,这些不是我的本意。我希望它在其他音乐播放器请求焦点时被调用。

private OnAudioFocusChangeListener focusChangeListener = new OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUDIOFOCUS_LOSS:

if (mPlayer.isPlaying()) {
stopPlayback();
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (mPlayer.isPlaying()) {
mPlayer.pause();
}
break;
case AudioManager.AUDIOFOCUS_GAIN:
if (!mPlayer.isPlaying()) {
initiatePlayback();
}
break;
}
}
};

还有一个问题,我遇到的异常是IllegalStateException

这意味着当代码到达 case AudioManager.AUDIOFOCUS_LOSS 内部时,我的音乐播放器处于某种错误状态。所以为了检查这一点,我注册了一个 OnErrorListener 使用:

//Inside Service - onCreate() Method
mPlayer.setOnErrorListener(mErrorListener);

但是这个监听器永远不会被调用。我会很感激任何帮助。

最佳答案

我有类似的问题,我强烈怀疑您的 focusChangeListener 是在您程序的某处重新创建的,因此您请求关注 focusChangeListener 的不同实例。您是根据服务或 Activity 来定义它吗?

我们的想法是维护您传递给 requestAudioFocus()abandonAudioFocus()focusChangeListener单个副本/;否则 AudioManager 将考虑来自不同来源的请求,这可能导致应用失去对自身的关注。

您应该知道,多次调用 requestAudioFocus() 在同一个监听器对象上确实会注册它 一次 并调用 abandonAudioFocus () 一次足以释放音频焦点。

一些可以解决您问题的建议:

  • 尝试将 focusChangeListener 定义为静态对象,看看是否有帮助。

  • 如果您的监听器已在 Activity 中注册,请考虑转移到服务以便监听器可以活得更久。

  • 要调试此问题,在您请求或放弃焦点时记录以下 ** 非常有帮助,以确保您拥有焦点,以确保您处理的是同一实例:

    • 您的 focusChangeListener 例如focusChangeListener.hashCode()
    • 当前上下文对象,例如context.hashCode()
    • 当前线程 ID 例如Thread.currentThread().getId()

例如:

  Log.d(TAG, String.format("Request audio focus: thread id = %s, context = %s, listener = %s",Thread.currentThread().getId(),context.hashCode(),focusChangeListener hashCode())

编辑:

使用应用上下文即 getApplicationContext() 也可以解决这个问题。

关于java - Android:MediaPlayer AUDIOFOCUS_LOSS 和 setOnErrorListener() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11860046/

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