Цикл Mediaplayer для Android Studio не останавливается при нажатии нескольких кнопок - PullRequest
0 голосов
/ 27 января 2019

Я столкнулся с проблемой при разработке приложения для Android.Проблема в том, что в моем приложении 9 кнопок.то есть 1, 2 и 3 со звуками A, B и C. когда я нажимаю кнопку 1, начинается звук.После отпускания 1 кнопки при нажатии 2 кнопки B начинается звук.Но когда я нажимаю кнопку 2 без отпускания кнопки 1 (касание нескольких кнопок), цикл кнопки 1 (звук A) не останавливается даже после отпускания кнопки и воспроизводится даже в фоновом режиме.Я должен закрыть свое приложение, чтобы остановить цикл.

Вот мой код MainActivity.Java.

package com.example.ahmed.sound5;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnTouchListener {

private MediaPlayer mp;
private int[] sounds = {R.raw.a1,R.raw.a2,R.raw.a3,R.raw.a4,R.raw.a5,R.raw.a6,R.raw.a7,R.raw.a8,R.raw.a    9};
private int[] btns = {R.id.button,R.id.button2,R.id.button3,R.id.button4,R.id.button5,R.id.button6,R.id.button7,R.id.button8,R.id.button9};

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //others codes
    for (int btn : btns) {
        ((Button) this.findViewById(btn)).setOnTouchListener(this);
    }
}

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN: {
            for (int i = 0 ; i<btns.length ; i++){
                if (v.getId() == btns[i]){
                    mp = MediaPlayer.create(this, sounds[i]);
                    break;
                }
            }
            v.setBackgroundResource(R.drawable.buttonh);
            mp.start();
            mp.setLooping(true);
        }

        break;
        case MotionEvent.ACTION_UP: {
            for (int btn : btns) {
                if (v.getId() == btn) {
                    mp.pause();
                    v.setBackgroundResource(R.drawable.button);
                    break;
                }
            }
        }
        break;
    }
    return true;



}}

Я хочу сделать кнопки такими: когда нажаты обе кнопки 1 и 2два отдельных звука, назначенных этим кнопкам, должны воспроизводиться и останавливаться на action_UP EVENT.

...