В документации Android есть ошибка, на этой странице сказано, что вы можете stop()
медиаплеер с «необработанным ресурсом», а затем воспроизвести его, просто вызвав reset()
и * 1005. * прежде чем позвонить start()
снова. Это не работает, как вы заметили.
Проблема в том, что reset()
очищает источник звука и возвращает его в исходное состояние, поэтому вы должны снова установить источник данных. К сожалению, вы не можете установить источник данных «необработанных ресурсов», потому что для этого нет API, кроме create()
.
Я не знаю чистого способа решения этой проблемы. Путь stealthcopter прекрасно работает, но это боль для вашего дизайна, так как вам нужен контекст для каждого вызова start () :( И включает в себя уничтожение и создание сложного объекта, который имеет цену для приложений реального времени, таких как игры ...
Другой способ, который гарантирует, что контекст будет необходим только для вызова create (), - это остановить медиаплеер следующим образом:
stop()
prepare()
но если вы вызовете start () сейчас, он не будет перезапущен с самого начала. Вы можете позвонить seekTo(0)
, но в этом звуке будет немного шума с предыдущей позиции воспроизведения.
Я продолжаю расследовать это. Должен быть чистый и эффективный способ остановки и перезапуска медиаплеера при его создании на необработанном ресурсе ...