有时音频不能与Android AudioManager Audio Focus一起播放

时间:2014-09-11 21:41:00

标签: android audio

此刻我有点奇怪的错误。我使用AudioManager播放循环剪辑,但首先请求音频焦点:

private void startPlayer(Sound sound) {

    audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        initMediaPlayer(sound);
    } else {
        Toast.makeText(getApplicationContext(), "Could not play audio at the moment...", Toast.LENGTH_LONG).show();
    }
}

在我的stop()方法中,我正在运行:

....  
if (player != null) {
    if (player.isPlaying()) {
        player.stop();
    }

    player.reset();
    player.release();
    player = null;
}
....

...在我的开始方法中,我使用以下方式初始化播放器:

...
player = MediaPlayer.create(getApplicationContext(), lookupSoundId(sound));
player.setWakeMode(getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
player.setLooping(true);
player.start();
...

我已经实现了一个onAudioFocusChange方法,该方法会在其他内容播放音频时停止音频。一切都很完美。

@Override
public void onAudioFocusChange(int focusChange) {
    switch (focusChange) {

        case AudioManager.AUDIOFOCUS_GAIN:
            if (player == null) {
                initMediaPlayer(currentSound);
            } else {
                if (!player.isPlaying()) {
                    play(); // this method updates the UI and starts the player
                }
            }
            player.setVolume(1.0f, 1.0f);
            break;

        case AudioManager.AUDIOFOCUS_LOSS:
            Log.d("onAudioFocusChange", "AudioManager.AUDIOFOCUS_LOSS");
            if ((player != null) && (player.isPlaying())) {
                stop(); // this method updates the UI and stops the player
            }
            break;

        case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
            Log.d("onAudioFocusChange", "AudioManager.AUDIOFOCUS_LOSS_TRANSIENT");
            if ((player != null) && (player.isPlaying())) {
                player.pause();
            }
            break;

        case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
            Log.d("onAudioFocusChange", "AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
            if ((player != null) && (player.isPlaying())) {
                player.setVolume(0.2f, 0.2f);
            }
            break;
    }
}

我的问题被描述为一系列步骤,因为它有点奇怪,它在安装了Android L开发者预览版(LPV79)的Nexus 5上运行:

  1. 在我的应用中按播放,循环开始播放
  2. 在我的应用中按暂停,循环停止
  3. 无限重复这个广告,一切都很好
  4. 在我的应用中按播放,然后打开Goog​​le音乐播放器并按播放 - 我的应用停止播放,音乐开始播放
  5. 在Google音乐播放器中按暂停
  6. 返回我的应用
  7. 在我的应用中按播放,循环开始播放
  8. 在我的应用中按暂停,循环停止
  9. 在我的应用中按播放,UI更新,就好像正在播放音频但没有播放音频
  10. 在我的应用程序中按暂停,然后播放然后暂停然后播放等但不会播放音频,尽管UI正在更新且代码似乎全部正在运行且没有错误/警告
  11. EITHER:终止Google音乐播放器应用,然后在我的应用中按播放,循环开始播放
  12. OR:等待5分钟,然后在我的应用程序中按播放,循环开始播放
  13. 另外,在我的stop()方法结束时,我正在调用audioManager.abandonAudioFocus(...);说我现在不需要关注音频。

    令人烦恼的是,当我尝试调试它并放入断点时,音频播放正常。我不确定是什么引起了它。 :/

0 个答案:

没有答案