Возможно, вам просто нужно положить сон в метод onCreate.
У меня была почти такая же проблема, когда я пытался написать приложение, которому иногда нужно было воспроизводить звук, как только оно просыпалось. В конце концов, после долгих проб и ошибок, я обнаружил, что в выводе журнала появляется ошибка «образец НЕ ГОТОВ». Проблема заключалась в том, что загрузка звукового файла происходит асинхронно, и если вы попытаетесь воспроизвести звук до того, как он загрузится, произойдет сбой.
Предположительно существует механизм, который вы можете использовать, называемый setOnLoadCompleteListener, но я еще не видел примера того, насколько это действительно полезно. В приведенном выше примере из mirroredAbstraction (при условии, что он работает как рекламируется) все, что произойдет, если звук еще не загружен, — это то, что он не будет воспроизводить звук, который почти такой же, как у вас сейчас.
Если этот пример каким-то волшебным образом «решил» вашу проблему, то я бы предположил, что это произошло только потому, что все дополнительные накладные расходы в вызовах двух методов в основном дают вашему звуку время для загрузки до того, как он будет воспроизведен. Вероятно, вы могли бы добиться того же результата с помощью простого SystemClock.sleep(100) в onCreate между загрузкой и воспроизведением.
В зависимости от размера вашего звука вам может понадобиться удлинить задержку, но немного экспериментов с различными задержками должны сказать вам, сколько вам нужно.
person
Kevin Golding
schedule
17.12.2012