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
。因此,当 pauseStatus
为 true
时手动暂停音乐,并在 pauseStatus
为 false
时恢复音乐。
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 中的一个低级错误。我会报告这个错误。
我在 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
。因此,当 pauseStatus
为 true
时手动暂停音乐,并在 pauseStatus
为 false
时恢复音乐。
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 中的一个低级错误。我会报告这个错误。