1

我有一个可以工作的警报应用程序,但想添加一个功能,用户可以在“连续播放警报直到确认”和“播放警报声一次”之间进行选择。

然后我查看了我的闹钟响铃代码,期望看到某种“重复”标志,我可以选择删除它 - 但没有。那么如何只播放一次警报声呢?

我现有的代码如下所示:

private void playSound(Context context, Uri alert) 
{
    mMediaPlayer = new MediaPlayer();
    try 
    {
        mMediaPlayer.setDataSource(context, alert);
        final AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
        if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0)
        {
            mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
            mMediaPlayer.prepare();
            mMediaPlayer.start();
        }
    } 
    catch (IOException e) 
    {
        // oops!
    }
}
4

1 回答 1

3

实际上,在每个警报声中都有一个名为 ANDROID_LOOP 的 FLAG,它会强制您的声音循环播放。不幸的是,即使使用 MediaPlayer.setLooping(false),您也无法更改该标志。但是您仍然可以在一段时间后手动停止播放器。例如 getDuration 会给你声音的长度。

int duration = mMediaPlayer.getDuration();

Runnable stopSoundRunnable = new Runnable() {

            @Override
            public void run() {
                  mMediaPlayer.stop();
            }
        };

mSoundHanlder.postDelayed(stopSoundRunnable, duration);
于 2012-12-09T14:56:34.470 回答