我能';我不能在android中停止我的媒体播放器吗?

我能';我不能在android中停止我的媒体播放器吗?,android,media-player,Android,Media Player,我正在使用mediaplayer在计时器中播放滴答声。但计时器结束后,它仍会继续播放,即使在我为media player呼叫停止后也是如此。我在计时器的ontick()中播放了如下所示的声音。在onfinish()中调用mp.Stop(),但它不起作用 mp = MediaPlayer.create(getBaseContext(), sound); mp.setOnCompletionListener(new OnCompletionListener

我正在使用mediaplayer在计时器中播放滴答声。但计时器结束后,它仍会继续播放,即使在我为media player呼叫停止后也是如此。我在计时器的ontick()中播放了如下所示的声音。在onfinish()中调用mp.Stop(),但它不起作用

              mp = MediaPlayer.create(getBaseContext(), sound);
        mp.setOnCompletionListener(new OnCompletionListener() {

            public void onCompletion(MediaPlayer mp) {
        });
        mp.setLooping(false);
        // mp.setVolume(0.1, 0.1);
        mp.start();
}
为我的计时器编码。

final class MyCounter extends CountDownTimer {

    public MyCounter(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onFinish() {
        timer.cancel();

        MediaPlayer.OnCompletionListener onCompletion = new MediaPlayer.OnCompletionListener() {

            public void onCompletion(MediaPlayer mp) {
                if (mp.isPlaying()) {
                    mp.release();
                    mp.stop();
                    mp.reset();
                }

            }
        };
        mp.setOnCompletionListener(onCompletion);
        i++;
        submitAnswer();
        final GameEngine ge = GameEngine.getInstance();

        timeer.setText("Timer Completed.");

        if (ge.getCurrentUnAllocatedAmount() > 0 && i <= 8) {
            final Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                public void run() {
                    Intent intent = new Intent(GameActivity.this,
                            ScoreActivity.class);
                    intent.putExtra("level", i);
                    ge.setCurrentLevel(i);
                    startActivity(intent);
                }
            }, 2200);
        } else if (ge.getCurrentUnAllocatedAmount() <= 0 || i > 8) {
            Intent intent = new Intent(GameActivity.this,
                    ScoreActivity.class);
            intent.putExtra("level", i);
            startActivity(intent);
        }

    }

    public void onTick(long millisUntilFinished) {
        remTime = (millisUntilFinished / 1000);
        timeer.setText("Time:" + (millisUntilFinished / 1000) + "");
        mp = MediaPlayer.create(getBaseContext(), R.raw.beep7);
        if (remTime > 0) {
            mp.start();
            mp.release();
        }
        if (remTime < 10) {
            final Handler handler = new Handler();
            handler.post(new Runnable() {
                public void run() {
                    if (timeer.getVisibility() == View.VISIBLE) {
                        timeer.setVisibility(View.INVISIBLE);
                    } else {
                        timeer.setVisibility(View.VISIBLE);
                    }

                    timeer.setTextColor(Color.RED);

                }
            });
        }
    }
}
final类MyCounter扩展了倒计时{
公共MyCounter(长百万未来,长倒计时间隔){
超级(毫秒未来,倒计时间隔);
}
@凌驾
公共无效onFinish(){
timer.cancel();
MediaPlayer.OnCompletionListener onCompletion=新建MediaPlayer.OnCompletionListener(){
完成时的公共作废(MediaPlayer mp){
if(mp.isPlaying()){
mp.release();
mp.stop();
mp.reset();
}
}
};
mp.setOnCompletionListener(onCompletion);
i++;
submitAnswer();
final GameEngine ge=GameEngine.getInstance();
Timer.setText(“计时器已完成”);
if(ge.getCurrentUnAllocatedAmount()>0&&i 0){
mp.start();
mp.release();
}
if(remTime<10){
最终处理程序=新处理程序();
handler.post(新的Runnable(){
公开募捐{
if(timer.getVisibility()==View.VISIBLE){
timer.setVisibility(视图不可见);
}否则{
timer.setVisibility(View.VISIBLE);
}
定时器。setTextColor(颜色。红色);
}
});
}
}
}
使用以下代码:

if(mediaPlayer.isPlaying())
{
    mediaPlayer.stop();
}
试试这个:

mp.setOnCompletionListener(onCompletion);

private MediaPlayer.OnCompletionListener onCompletion = new MediaPlayer.OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                        if(mp.isPlaying())
                        {
                             mp.stop();
                             mp.reset();
                        }

                }
        };

检查定时器停止时的状态

if(mPlayer.isPlaying())
{
    mPlayer.stop();
}

我认为您没有在
onCompletionListener()
本身上调用
release()
方法

mp.setOnCompletionListener(new OnCompletionListener() {
    @Override 
    public void onCompletion(MediaPlayer mp) {
       mp.release();
    });

完成playeri后,我也尝试调用mp.pause()。它不起作用。尝试在播放器完成时编写mp.stop()和mp.reset()。在发布内容之前,请查看其他用户的答案!!让我保证,它每次都会发生,或者当你保持调用media Player的相同意图时也会发生??在计时器结束后,它移动到另一个活动。但仍然会继续播放声音。如果你必须在计时器前停止播放机,那么你为什么要呼叫完成??当计时器结束时,只需使用mp.stop()。这是用户给出的答案..但没有任何效果..即使是mp.stop(),请调试您的代码并检查u stop()mp对象何时不是新实例或为null最后一行
mp=null
是无用的,因为它只影响方法
onCompletion
中的变量
mp
。在
onCompletion
结束时,它的引用计数无论如何都会减少。
mp.setOnCompletionListener(new OnCompletionListener() {
    @Override 
    public void onCompletion(MediaPlayer mp) {
       mp.release();
    });
mp.setOnCompletionListener(new OnCompletionListener() {
    @Override 
    public void onCompletion(MediaPlayer mp) {

       if (mp.isPlaying()) {
           mp.stop();
            }

            mp.release();
            mp = null;
        }


    });