Я пишу приложение будильника для Android, которое использует службу для воспроизведения сигнала будильника. В настоящее время я могу воспроизвести звук, но он воспроизводится в форме, которую можно отключить, уменьшив громкость устройства. Таким образом, я пытаюсь добавить вызов setAudioStreamType(AudioManager.STREAM_ALARM);
, чтобы предотвратить это.
У меня есть следующее для моей функции onStartCommand()
службы:
MediaPlayer mMP;
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
try
{
mMP = MediaPlayer.create(this, R.raw.alarm);
mMP.setAudioStreamType(AudioManager.STREAM_ALARM);
mMP.setLooping(true);
//mMP.prepare(); commented out since prepare() is called in create
}
catch (Exception e)
{
e.printStackTrace();
}
if (mMP != null) mMP.start();
return START_STICKY;
}
Проблема в том, что при вызове setAudioStreamType() MediaPlayer никогда не воспроизводит звук. Если я закомментирую эту строку, будет воспроизводиться звук.
При вводе строки я получаю следующие ошибки времени выполнения:
04-10 19:32:03.115: E/MediaPlayer(3411): setAudioStream вызывается в состоянии 8
04-10 19: 32:03.115: E/MediaPlayer(3411): ошибка (-38, 0)
04-10 19:32:03.115: E/MediaPlayer(3411): запуск вызван в состоянии 0
04-10 19: 32:03.115: E/MediaPlayer(3411): ошибка (-38, 0)
04-10 19:32:03.115: E/MediaPlayer(3411): ошибка (-38,0)
04-10 19:32:03.115: E/MediaPlayer(3411): Ошибка (-38,0)
Некоторые исследования (сейчас не могу найти ссылку) показали, что setAudioStreamType()
не может быть вызвана после вызова prepare()
и что create()
неявно вызывает prepare()
.
В любом случае, как я должен setAudioStreamType()
без такой ошибки?