获取铃声仅在mediaPlayer中循环一次

时间:2013-05-10 17:28:44

标签: android android-mediaplayer

所以基本上我使用Spinner小部件并将其传递给RingtoneManager Picker动作,然后用户选择他们的铃声。然后我调用onActivityResult()并获取铃声的uri。 最后,我将uri传递到另一个活动,在那里我有一个警报设置在一段特定的时间后停止。

问题>>>当我在第二个活动中获得铃声的uri并让mediaPlayer播放它时,它......它不会停止。无论我尝试什么。

这是第二个活动,也是永不停止的mediaPlayer。

                    Uri ringtone;
                    ringtone = Uri.parse(musixType);
                    //mMediaPlayer.setDataSource(DisplayNotification.this, ringtone);
                    mMediaPlayer = MediaPlayer.create(DisplayNotification.this, ringtone);
                    mMediaPlayer.start();
                    mMediaPlayer.setVolume(100, 100);
            }
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {

                    while (mMediaPlayer != null) {
                        mMediaPlayer.stop();
                        mMediaPlayer.release();
                        mMediaPlayer = null;
                    }
                }
            });

如何让它停止@。@

编辑: 它不会停止播放的原因是它是来自RingtoneManager的铃声吗?我不知道为什么这会重要,但我现在正在抓住吸管。

编辑: 有没有办法为mediaPlayer指定一定的时间长度来运行并忽略传递给它的数据?

4 个答案:

答案 0 :(得分:2)

您使用了MediaPlayer.setLooping方法

吗?

使用mMediaPlayer.setLooping(false);

答案 1 :(得分:0)

使用此

mMediaPlayer.setLooping(真);

答案 2 :(得分:0)

由于您未在setLooping(true);引用的对象上调用mMediaPlayer,因此在此处循环不应该是问题,因为默认设置为false。确保你实际上没有从外面多次调用这段代码。在Log之前添加mMediaPlayer = MediaPlayer.create(DisplayNotification.this, ringtone);行,并查看记录的次数。

答案 3 :(得分:0)

我也遇到了这个问题,并像这样解决了它:

player.setDataSource(this, ringtone);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.prepareAsync();
 player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(final MediaPlayer mp) {
        myHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mp.stop();
                mp.release();
            }
        }, mp.getDuration()); <-- Make a postDelayed runnable that has the duration of the file as its cut off. Once the song plays, it will stop the mediaPlayer.
        mp.start();
    }
});