Проблема была не в том, что эмулятор не издает звук (что подтверждается тем фактом, что он не будет работать и на моем устройстве), а в неучтенной проблеме с классом SoundPool.
Я посмотрел в logcat и нашел ссылки типа "образец 1 не готов". Исследуя это, я наконец нашел неясную тему, в которой упоминалось, что требуется некоторое время, прежде чем пул звуков будет готов к использованию (и, следовательно, все звуки должны быть загружены задолго до их использования).
Я изменил свой метод playSound, чтобы отслеживать возвращаемое значение вызова метода soundPool.play (...). Он возвращает идентификатор запущенного звукового потока или 0, если произошел сбой (т. Е. «Образец 1 не готов»).
То, что я сделал, было поместить его в цикл, и когда возвращаемое значение
Вызов метода soundPool.play (...) был равен 0, у меня был спящий поток для 1
миллисекунду, затем повторите попытку. С этим методом на месте, я теперь всегда
получить звук.
В качестве примечания я также запускал учебные пособия с моим SDK, настроенным для Android 2.2 вместо Android 2.3.1, потому что Android 2.2 - это то, что установлено на моем устройстве, Sprint LG optimus S LS670.
Мой измененный код был запущен на виртуальном устройстве Android 2.2 и Android 2.3.1.
Когда я запускаю код на более старом Android 2.2 VD, обычно требуется от 10 до 15 циклов (таким образом, задержка в 10-15 мс), прежде чем sounspool был готов воспроизвести звук.
Когда я запускал тот же код на Android 2.3.1 VD, задержка была НАМНОГО хуже, с задержкой в 350 мс, прежде чем она заработала - да, почти в 35 раз медленнее!
Когда я запускал тот же код, запущенный на моем устройстве под управлением Android 2.2, время задержки было примерно таким же, как при запуске его на эмуляторе.