服务结束时发出通知声音

时间:2011-12-06 19:04:57

标签: android audio service notifications

我有一项服务,当它完成正在运行的任务时,会播放声音通知。当它结束时,我的调用应用程序,如果它在最顶层调用stopservice。问题是notificationmanager在声音结束之前返回,因此应用程序在声音结束之前停止服务(如果它很长)。是否有一种方法可以检测声音何时完成,以便在声音结束前不让服务停止? 我一直在调查soundmanager和其他线程没有运气。此外,一个解决方法是放一个Thread.sleep(ms),但如果通知声音很长,它可能会被停止,我想在服务完成后从我的应用程序响应。 一个可能的解决方案是计算mp3文件的长度,但我不知道该怎么做....

1 个答案:

答案 0 :(得分:2)

假设您使用MediaPlayer进行播放,可以使用MediaPlayer.getDuration()获得持续时间。

请注意,这不适用于某些VBR个mp3。因此,您可能希望以恒定的比特率保存mp3,或者在将它们放入应用程序之前运行vbrfix之类的工具。

持续时间以毫秒为单位返回,因此您只需将此值传递给SystemClock.sleep()

即可

/编辑:

好的,如果您将文件另存为资产,则可以使用以下代码:

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();