Звук уведомления о завершении обслуживания - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть служба, которая, когда она заканчивает выполнение задач, воспроизводит уведомление со звуком.Когда оно заканчивается, мое вызывающее приложение, если оно находится на вершине, вызывает stopservice.Проблема в том, что диспетчер уведомлений возвращается до окончания звука, поэтому приложение останавливает службу до того, как звук закончится (если он длинный).Есть ли способ определить, когда закончился звук, чтобы не дать сервису остановиться до окончания звука?Я смотрю в soundmanager и другие темы без удачи.Кроме того, в качестве обходного пути можно добавить Thread.sleep (мс), но если звук уведомления длинный, его можно в любом случае остановить, и я хотел бы получить отзыв от моего приложения сразу после завершения обслуживания.Возможным решением будет рассчитать длину mp3-файла, но я не знаю, как это сделать ....

1 Ответ

2 голосов
/ 06 декабря 2011

Если вы используете MediaPlayer для воспроизведения, вы можете получить длительность с MediaPlayer.getDuration().

Обратите внимание, что это не будет работать с некоторыми VBR mp3.поэтому вы можете сохранить mp3 с постоянным битрейтом или запустить такой инструмент, как vbrfix , прежде чем помещать их в свое приложение.

Длительность возвращается в миллисекундах, так что вы можете просто пропустить этозначение SystemClock.sleep()

/ edit:

Хорошо, если файл сохранен как актив, вы можете использовать этот код:

MediaPlayer media = new MediaPlayer();
    AssetFileDescriptor descriptor;
    try {
        descriptor = assetMan.openFd("YOURNAME.mp3");
        media.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
        descriptor.close();
        media.prepare();
    } catch (IOException e) {
        // File not found
        e.printStackTrace();
    }
     media.getDuration();
    media.release();
...