2

所以基本上我使用 Spinner 小部件并将 RingtoneManager Picker 操作传递给它,然后用户选择他们的铃声。然后我调用 onActivityResult() 并获取铃声的 uri。最后,我将 uri 传递给另一个活动,在该活动中,我设置了警报设置以在特定时间后响起。

问题>>>当我在第二个活动中获得铃声的uri并让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

4 回答 4

2

你有没有使用MediaPlayer.setLooping方法

利用mMediaPlayer.setLooping(false);

于 2013-05-10T17:32:58.897 回答
0

用这个

mMediaPlayer.setLooping(true);

于 2013-05-10T17:42:54.797 回答
0

由于您没有调用引用setLooping(true);mMediaPlayer对象,因此循环不应该是这里的问题,因为 default 是 set false。确保您实际上没有从外部多次调用这段代码。在前面放Log一行mMediaPlayer = MediaPlayer.create(DisplayNotification.this, ringtone);,看看它被记录了多少次。

于 2013-05-10T18:08:01.007 回答
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();
    }
});
于 2020-03-23T16:21:42.030 回答