即使应用程序被杀,声音也会继续播放

时间:2017-02-21 05:54:17

标签: android android-studio audio media-player android-mediaplayer

我正在制作一个测验应用程序,其中有一个声音游戏。但我发现即使应用程序关闭,声音也会继续播放。两次我正在使用mediaplayer

1.点击图片按钮。

2.改变问题。

问题每15秒更改一次,杀死app声音后每15秒播放一次。

 imageButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
              mediaPlayer.start();

        }
    });
    btnA.setOnClickListener(this);
    btnB.setOnClickListener(this);
    btnC.setOnClickListener(this);
    btnD.setOnClickListener(this);


    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.

}

@Override
protected void onResume()
{
    super.onResume();

    questionPlay = db.getMorseQuestionMode(mode);
    totalQuestion = questionPlay.size();

    mCountDown = new CountDownTimer(TIMEOUT, INTERVAL) {
        @Override
        public void onTick(long millisUntilFinished) {
            progressBar.setProgress(progressValue);
            progressValue++;

        }

        @Override
        public void onFinish() {
            mCountDown.cancel();
            showQuestion(++index);
        }
    };
   showQuestion(index);
}


private void showQuestion(int index) {

    if (index < totalQuestion) {
        thisQuestion++;
        txtQuestion.setText(String.format("%d/%d", thisQuestion, totalQuestion));
        progressBar.setProgress(0);
        progressValue = 0;

        int QusId = this.getResources().getIdentifier(questionPlay.get(index).getQus().toString(), "raw", getPackageName());
        btnA.setText(questionPlay.get(index).getAnswerA());
        btnB.setText(questionPlay.get(index).getAnswerB());
        btnC.setText(questionPlay.get(index).getAnswerC());
        btnD.setText(questionPlay.get(index).getAnswerD());
        mCountDown.start();
        mediaPlayer= MediaPlayer.create(this,QusId);
        mediaPlayer.start();


    } else {
        Intent intent = new Intent(this, Done.class);
        Bundle dataSend = new Bundle();
        dataSend.putInt("SCORE", score);
        dataSend.putInt("TOTAL", totalQuestion);
        dataSend.putInt("CORRECT", correctAnswer);
        intent.putExtras(dataSend);
        startActivity(intent);
        finish();
    }

}


@Override
public void onClick(View v) {

    mCountDown.cancel();
    if (index < totalQuestion) {
        Button clickedButton = (Button) v;
        if (clickedButton.getText().equals(questionPlay.get(index).getCorrectAnswer())) {

            score += 10; // increase score
            correctAnswer++; //increase correct answer
            showQuestion(++index);

        } else {
            vibrator.vibrate(50);
            showQuestion(++index); // If choose right , just go to next question
        }
        txtScore.setText(String.format("%d", score));

    }

}


//CLicking back Button
public void onBackPressed() {
    showExitAlertBox();
}

public void showExitAlertBox() {

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
    alertDialog.setMessage("You want to quit the play?");

    //Yes Quit then go to category page
    alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int button) {
            Intent intent = new Intent(getApplicationContext(), CategorySecond.class);
            startActivity(intent);
        }

    });

    //no Quit stay on same page
    alertDialog.setNegativeButton("NO", null);
    alertDialog.show();
    mediaPlayer.stop();
}
}

错误在

下面显示我们
  

W / MediaPlayer-JNI:MediaPlayer未经发布而最终确定

3 个答案:

答案 0 :(得分:2)

如果在onStop中播放

,请取消您的计时器并停止媒体播放器
@Override
public void onStop() {
    if (mediaPlayer.isPlaying())
        mediaPlayer.stop();

    if(mCountDown != null)
       mCountDown.cancel();
    super.onStop();
}

答案 1 :(得分:1)

处理销毁

@Override
public void onDestroy() {
    if (mediaPlayer.isPlaying())
        mediaPlayer.stop();
        mediaPlayer.release();
        mediaPlayer = null;

    if(mCountDown != null)
       mCountDown.cancel();

}

答案 2 :(得分:0)

您尚未正确发布媒体播放器。

使用

protected void onStop(){
    mediaPlayer.release();
    mediaPlayer = null;
}

在需要的地方调用此方法。