Как остановить MediaPlayer, когда нажата кнопка «Назад» или нажата другая звуковая кнопка? - PullRequest
0 голосов
/ 29 марта 2019

У меня проблема с программированием Android.Я хочу рассказать вам о проблеме.У меня есть несколько кнопок.Плеер работает, когда мы нажимаем на них.Но звук не воспроизводится после окончания предыдущего звука.Кроме того, когда мы нажимаем кнопку «Назад», он ожидает окончания звука, а затем выполняет функцию кнопки «Назад».

Я добавил onBackPressed и onPause.Но программа не прошла после первого воспроизведения звука.

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageButton;
public class officeSounds extends AppCompatActivity implements View.OnClickListener{

    ImageButton sofitukker,millieturner,jacobbanks,jameshersey;
    MediaPlayer mp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //fullscreen - start
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //fullscreen - end
        setContentView(R.layout.activity_office_sounds);

        sofitukker=findViewById(R.id.sofitukker);
        sofitukker.setOnClickListener(this);
        millieturner=findViewById(R.id.millieturner);
        millieturner.setOnClickListener(this);
        jacobbanks=findViewById(R.id.jacobbanks);
        jacobbanks.setOnClickListener(this);
        jameshersey=findViewById(R.id.jameshersey);
        jameshersey.setOnClickListener(this);
    }
    public void onClick(View view){
        switch(view.getId()){
            case R.id.sofitukker:
                mp = MediaPlayer.create(this, R.raw.sofitukkersound);
                break;
            case R.id.millieturner:
                mp = MediaPlayer.create(this, R.raw.millieturnersound);
                break;
            case R.id.jacobbanks:
                mp = MediaPlayer.create(this, R.raw.jacobbankssound);
                break;
            case R.id.jameshersey:
                mp = MediaPlayer.create(this, R.raw.jamesherseysound);
                break;
            default:
                return;
        }

        mp.start();
        while (mp.isPlaying()) {
        }
        mp.release();

    }
}

Я хочу остановить предыдущий звук при переключении кнопки «Назад» и другого звука.

Редактировать: Когда я добавил оператор switch-case к while (mp.isPlaying()) { //here }

Приложение не ожидает завершения звука.Сочетает звуки.Когда второй звук нажимается после нажатия первого звука, второй звук воспроизводится до нажатия первого звука.Так что два звука какое-то время играют вместе.

1 Ответ

0 голосов
/ 30 марта 2019

Вы можете попытаться добавить mp.release () каждый раз, когда нажимаете на экран, чтобы воспроизводимые медиа-файлы автоматически освобождались:

public void onClick(View view){
    mp.release();
    switch(view.getId()){
        case R.id.sofitukker:
            mp = MediaPlayer.create(this, R.raw.sofitukkersound);
            break;
        case R.id.millieturner:
            mp = MediaPlayer.create(this, R.raw.millieturnersound);
            break;
        case R.id.jacobbanks:
            mp = MediaPlayer.create(this, R.raw.jacobbankssound);
            break;
        case R.id.jameshersey:
            mp = MediaPlayer.create(this, R.raw.jamesherseysound);
            break;
        default:
            return;
    }

И добавить это методом обратного нажатия (или предпочитаете mp.stop () если вам не нужно хранить mp):

@Override
public void onBackPressed() {
mp.release();
}

MediaPlayer Android

...