Jak to zrobić, aby odtwarzał tylko dźwięk, który wybrałem, dopóki nie naciśnę innego przycisku ImageButton, aby nie brzmiały one nawzajem.

public class MainActivity extends AppCompatActivity {
    MediaPlayer leaf,water,fire,wind;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        leaf=MediaPlayer.create(MainActivity.this,R.raw.forest);
        water=MediaPlayer.create(MainActivity.this,R.raw.sea);
        fire=MediaPlayer.create(MainActivity.this,R.raw.fire);
        wind=MediaPlayer.create(MainActivity.this,R.raw.wind);
    }
    public void playleaf(View view ) {
        leaf.setLooping(true);
        leaf.start();
    }
    public void playwater(View view ) {
        water.setLooping(true);
        water.start();
        water.start();
    }
    public void playfire(View view ) {
        fire.setLooping(true);
        fire.start();
    }
    public void playwind(View view ) {
        wind.setLooping(true);
        wind.start();
    }
}
0
ldf 19 grudzień 2019, 20:06
Dlaczego musisz tworzyć różne instancje MediaPlayer? Możesz utworzyć pojedynczą instancję.
 – 
Rahul Agrawal
19 grudzień 2019, 20:09

1 odpowiedź

Zrób coś takiego.

MediaPlayer player;

public void playleaf(View view) {

    stopMedia();
player = new MediaPlayer();

    player.setDataSource(R.raw.leaf);

    player.prepareAsync();

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            player.setLooping(true);
            player.start();
        }
    });
}

public void playwater(View view) {
    stopMedia();

player = new MediaPlayer();

    player.setDataSource(R.raw.leaf);

    player.prepareAsync();

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            player.setLooping(true);
            player.start();
        }
    });
}

private void stopMedia() {
    if (player != null) {
        player.release();
        player = null;
    }
}

public void playfire(View view) {
    stopMedia();

player = new MediaPlayer();

    player.setDataSource(R.raw.leaf);

    player.prepareAsync();

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            player.setLooping(true);
            player.start();
        }
    });
}

public void playwind(View view) {
    stopMedia();

player = new MediaPlayer();

    player.setDataSource(R.raw.leaf);

    player.prepareAsync();

    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            player.setLooping(true);
            player.start();
        }
    });
}
0
Rahul Agrawal 19 grudzień 2019, 20:14
Dziękuję, wyskakuję błąd w tej części (R.raw.laef); błąd: nie znaleziono odpowiedniej metody dla metody setDataSource(int) MediaPlayer.setDataSource(String) nie ma zastosowania
 – 
ldf
19 grudzień 2019, 21:38