3

メディアプレーヤーを使用してタイマーでダニの音を再生していますが、タイマーが終了した後も再生を続けます。メディアプレーヤーの停止を呼び出した後も再生されます。タイマーのontick()で以下のような音を出しました。mp.Stop()と呼ばれるonfinish()では、機能しません。

              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);

                }
            });
        }
    }
}
4

6 に答える 6

0

release()メソッドonCompletionListener()自体を呼び出しているのではないと思います。

mp.setOnCompletionListener(new OnCompletionListener() {
    @Override 
    public void onCompletion(MediaPlayer mp) {
       mp.release();
    });
于 2012-07-15T01:36:34.663 に答える
0
mp.setOnCompletionListener(new OnCompletionListener() {

        public void onCompletion(MediaPlayer mp) {
mp.stop();
    });
于 2012-07-13T11:51:29.940 に答える
0

これを試して:

mp.setOnCompletionListener(onCompletion);

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

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

                }
        };
于 2012-07-13T11:52:46.717 に答える
0

次のコードを使用します。

if(mediaPlayer.isPlaying())
{
    mediaPlayer.stop();
}
于 2012-07-13T11:49:01.600 に答える
-1

タイマー停止時の状態を確認。

if(mPlayer.isPlaying())
{
    mPlayer.stop();
}
于 2012-07-13T11:56:11.813 に答える