2016-04-30 7 views
4

У меня проблема с воспроизведением звука в Android-сборке. Я использую Unity 5.4.0b15, но у меня была такая же проблема на 5.3.4p3.Unity3D - Воспроизведение звука при отключении после получения любого вызова/уведомления на Android

У меня есть простой компонент для воспроизведения фоновой музыки, добавленный в «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 или любой другой massinger), музыка перестает играть. Также все остальные звуки играют приглушенным, что я использовал в игровом процессе. Единственный способ перезапустить воспроизведение звука - это убить приложение и запустить его снова.

Также получаю ту же приглушенную проблему, когда я запускаю игру, слушая любой звук с помощью собственного проигрывателя, например Play Music.

На iOS все работает отлично.

+0

Вы приняли мой ответ, поэтому я подумал, что это сработало для вас. Пожалуйста, не принимайте ответы, если они не решили вашу проблему. Для быстрого уведомления это было решено в 5.4.0B23 сегодня. http://unity3d.com/unity/beta – Programmer

+0

любое обходное решение для этого ??? У меня такая же проблема в 5.3.5f1 – Kenshin

ответ

6

Это определенно ошибка в Unity. Я столкнулся с той же проблемой и провел несколько тестов, чтобы попытаться исправить это, но нет способа восстановить аудио без перезапуска приложения.

В моих тестах я использовал уведомления Google Hangouts, чтобы убить аудио.

Предлагаемое исправление программиста не будет работать, потому что: 1. Уведомление не вызывает приостановку приложения или события фокуса приложения. 2. Инициализация новых экземпляров AudioListener и/или AudioSource также не восстановит звук.

Это ошибка низкого уровня в Unity. Я сделаю отчет об ошибке.

+0

Привет, Эдуардо, большое спасибо за ваш ответ. У меня все еще есть одна проблема и соглашаюсь с вами о ошибке низкого уровня в Unity. Я также обнаружил ошибку в Unity Issue Tracker. https://issuetracker.unity3d.com/issues/android-slash-audio-android-app-stops-playing-audio-at-all-if-another-app-takes-audio-focus –

2

На iOS все работает отлично.

Android != iOS.

Используйте OnApplicationPause(bool pauseStatus), чтобы обнаружить, когда приложение приостановлено и возобновлено. Переменная pauseStatus вернет 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(); 
     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^