Unity3D - 在Android上收到任何通话/通知后,音频播放静音

时间:2016-04-30 20:14:56

标签: android unity3d audio phone-call

我在Android版本上有音频播放问题。我使用Unity 5.4.0b15,但我在5.3.4p3上遇到了同样的问题。

我有简单的组件用于播放添加到场景中“AudioPlayer”GameObject的背景音乐。

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设备上运行游戏后,音乐开始播放完美。但是当它运行时,我会收到任何通知或电话(电话,viber或任何其他按摩器)音乐停止播放。所有其他声音都在静音,我在游戏中使用过。重新开始播放音频的唯一方法是终止应用程序并再次运行它。

当我在使用原生播放器(如Play Music)收听任何音频时运行游戏时,也会遇到相同的问题。

在iOS上,一切都很完美。

2 个答案:

答案 0 :(得分:6)

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

在我的测试中,我使用Google Hangouts通知来杀死音频。

程序员提议的修复不起作用,因为: 1.通知不会触发应用程序暂停或应用程序焦点事件。 2.初始化新的AudioListener和/或AudioSource实例也不会恢复音频。

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

答案 1 :(得分:2)

  

在iOS上,一切都很完美。

Android != iOS

使用OnApplicationPause(bool pauseStatus)检测应用程序何时暂停和恢复。当应用已暂停时,pauseStatus变量将返回true;当恢复时,false将返回pauseStatus。因此,在truepauseStatus时手动暂停音乐,并在falsepublic 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(); } } } 时继续播放音乐。

dictionary.get('key')