Android的媒体播放器永远循环的ICS(android mediaplayer loops fo

2019-07-29 13:45发布

我想打一个通知声音,我的问题是它的声音一直循环,当它应该听起来只有一次。

我已经试过两种方式:

notification.sound = Uri.parse("content://media/internal/audio/media/38");

mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mMediaPlayer.setDataSource(this, Uri.parse("content://media/internal/audio/media/38"));
mMediaPlayer.setLooping(false);
mMediaPlayer.prepare();
mMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        Log.v(Utils.TAG, "onprepared");
        mp.start();
    }
});

mMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        Log.v(Utils.TAG, "end, we should release");
        mp.stop();
        mp.release();
    }
});

在第二种情况下,我从来没有看到跟踪“到底,我们应该释放”时,音频播放一遍又一遍又一遍。

任何的想法?

非常感谢你

更新:

我试过两台设备:

  • 它永远在循环,在Galaxy Nexus与ICS 4.0.4
  • 它工作正常,在HTC Hero的2.2.1

Answer 1:

有以“内置”的循环,这将永远播放声音。 这是对MediaPlayer的设置为循环不同。 如果你开始播放声音与内置的循环,它永远不会结束。 这些大多是铃声(相对于报警音调或通知音调)。 您可以设置RingtoneManager只返回通知铃声或闹钟铃声与myringtonemanager.setType(RingtoneManager.TYPE_ALARM|RingtoneManager.TYPE_NOTIFICATION)这将排除大部分循环的声音,但unfortunaley并不保证排除所有这些在任何设备上。 :-(

因此蒂亚戈阿尔梅达的解决方案是一个很好的变通(我已经投它),虽然它也将截断它只有很少的(没有无限)循环中的所有声音。



Answer 2:

试试这个:

try {
    mp.setDataSource(uri.toString());
    mp.setAudioStreamType(AudioManager.STREAM_ALARM);
    mp.prepare();
    mp.start();
    mp.setOnSeekCompleteListener(new OnSeekCompleteListener() {
        public void onSeekComplete(MediaPlayer mp) {
            mp.stop();
            mp.release();
        }
    });
} catch (Exception e) {
    e.printStackTrace();
}


文章来源: android mediaplayer loops forever on ICS