因此,基本上,我使用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运行一定时间长度,而忽略传递给它的数据?
由于没有在setLooping(true);
引用的对象上调用mMediaPlayer
,因此此处的循环不应成为问题,因为默认设置为false
。确保您实际上没有从外部多次调用这段代码。在Log
之前放置mMediaPlayer = MediaPlayer.create(DisplayNotification.this, ringtone);
行,并查看记录了多少次。
您是否使用过MediaPlayer.setLooping方法
使用mMediaPlayer.setLooping(false);
使用此
mMediaPlayer.setLooping(true);
我也遇到了这个问题,并像这样解决了它:
player.setDataSource(NotiMods.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();
}
});