Как остановить запуск музыки, если приложение работает в фоновом режиме?

Хорошо, я потратил почти два дня на это и ни к чему не прихожу, так что пишите здесь в надежде, что кто-то может найти какое-то решение!

В моем приложении я запускаю музыку с помощью метода onSurfaceChanged. Кажется, неплохое место для этого, так как оно начнется после загрузки всех моих ресурсов.

Все работает отлично, за исключением того, что..... если пользователь нажимает клавишу home до того, как все завершит загрузку, то приложение (как и следовало ожидать) с радостью переходит в фоновый режим, но onSurfaceCreated, onSurfaceChanged и начальный вызов onDrawFrame все еще запущен... поэтому моя музыка начинает воспроизводиться, даже если приложение находится в состоянии "приостановлено" и пользователь не может его увидеть.

Я понимаю, что это (вызов 3-х обратных вызовов, перечисленных выше) является нормальным поведением, и GLSurfaceView не будет на самом деле приостанавливаться, пока не нажмет onDrawFrame - в некотором смысле это хорошо, потому что даже если пользователь нажимает home, вещи могут продолжать загружаться в фоновом режиме, но это не хорошо для моей музыкальной проблемы!

Я пытался запустить музыку изнутри onResume, но при первом запуске приложения все еще не настроено. Поэтому мне пришлось поставить на место проверку на ноль - поэтому он работает только при последующих запусках (т.е. из состояния паузы).

Любые идеи очень приветствуются!

1 ответ

Решение

Используйте логическое значение, чтобы убедиться, что приложение ориентировано на пользователя, прежде чем начать воспроизводить музыку.

В onSurfaceChanged:

if(canPlay) //Do what you need to play the music

В onResume:

canPlay = true;

В onPause:

canPlay = false;

РЕДАКТИРОВАТЬ - Или использовать этот механизм в других формах, если это необходимо. Если вы воспроизводите звук через GL, вы можете установить логическое значение где-нибудь еще. Ключ выключает механизм в onPause и в onResume.

Другие вопросы по тегам