Unity3D - 在 Android 上获得任何 call/notification 后音频播放变得静音

Unity3D - Audio playing getting muted after getting any call/notification on Android

我在 Android 构建时遇到音频播放问题。我使用的是 Unity 5.4.0b15,但我在 5.3.4p3 上遇到了同样的问题。

我在场景中的 "AudioPlayer" 游戏对象中添加了用于播放背景音乐的简单组件。

public AudioClip clip;
private AudioSource _musicAudioSource;

private void Awake()
{
   if (_musicAudioSource == null)
   {
       _musicAudioSource = gameObject.AddComponent<AudioSource>();
   }
   _musicAudioSource.loop = true;
   _musicAudioSource.clip = clip;
   _musicAudioSource.Play();
}

在 Android 台设备上玩 运行 游戏后,音乐开始完美播放。但是当它 运行ning 我收到任何通知或电话(phone、viber 或任何其他 massinger)时,音乐停止播放。此外,我在游戏中使用的所有其他声音播放都变得静音。重新开始播放音频的唯一方法是终止应用程序并再次 运行 它。

当我 运行一边玩游戏一边使用本地播放器(例如 Play Music)收听任何音频时,也会遇到同样的静音问题。

在 iOS 上一切正常。

On iOS everything works perfectly.

Android != iOS

使用OnApplicationPause(bool pauseStatus)检测应用程序何时暂停和恢复。当应用 暂停 时,pauseStatus 变量将 return true,当应用 恢复时 false 。因此,当 pauseStatustrue 时手动暂停音乐,并在 pauseStatusfalse 时恢复音乐。

public AudioClip clip;
private AudioSource _musicAudioSource;
bool _musicAudioSourcePaused = false;

void Awake()
{
    if (_musicAudioSource == null)
    {
        _musicAudioSource = gameObject.AddComponent<AudioSource>();
        _musicAudioSource.loop = true;
        _musicAudioSource.clip = clip;
    }

    //Check if Audio is playing. Don't play if already playing. 
    if (!_musicAudioSource.isPlaying)
    {
        _musicAudioSource.Play();
    }
}

void OnApplicationPause(bool pauseStatus)
{
    //Check if this is Pause
    if (pauseStatus)
    {
        //Pause Audio if it is playing
        if (_musicAudioSource.isPlaying)
        {
            _musicAudioSource.Pause();

            //Set to true so that we will detamine whether to Play() or UnPause() the music next time
            _musicAudioSourcePaused = true;
        }
    }

    //Check if this is Resume
    if (!pauseStatus)
    {
        //Make sure audio is not null. If null, getComponent again
        if (_musicAudioSource == null)
        {
            _musicAudioSource = gameObject.AddComponent<AudioSource>();
            _musicAudioSource.loop = true;
            _musicAudioSource.clip = clip;
        }

        //Check if we paused the audio then resume
        if (_musicAudioSourcePaused)
        {
            _musicAudioSource.UnPause();

            //Set to false so that we will detamine whether to Play() or UnPause() the music next time
            _musicAudioSourcePaused = false;
        }

        //Check if Audio is playing. Don't play if already playing. 
        if (!_musicAudioSource.isPlaying)
        {
            _musicAudioSource.Play();
        }
    }
}

这绝对是 Unity 中的一个错误。我遇到了同样的问题,运行 进行了一些测试以尝试修复它,但是如果不重新启动应用程序就无法恢复音频。

在我的测试中,我使用 Google 环聊通知来关闭音频。

程序员提出的修复方案不会奏效,因为: 1、通知不会触发应用暂停和应用焦点事件。 2. 初始化一个新的 AudioListener and/or AudioSource 实例也不会恢复音频。

这是 Unity 中的一个低级错误。我会报告这个错误。