android play sound - Riproduci l'audio sul pulsante Fai clic su Android




3 Answers

Questa è la parte più importante del codice fornito nel post originale.

Button one = (Button) this.findViewById(R.id.button1);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        mp.start();
    }
});

Per spiegarlo passo dopo passo:

Button one = (Button) this.findViewById(R.id.button1);

La prima è l'inizializzazione del pulsante da utilizzare durante la riproduzione del suono. Usiamo findViewById di findViewById , passando l'Id che gli abbiamo assegnato (nel caso R.id.button1 : R.id.button1 ), per ottenere il pulsante di cui abbiamo bisogno. Lo abbiamo lanciato come Button modo che sia facile assegnarlo alla variabile che stiamo inizializzando. Spiegare più di come funziona è fuori portata per questa risposta. This dà una breve panoramica su come funziona.

final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);

Ecco come inizializzare un MediaPlayer . MediaPlayer segue il modello di progettazione del metodo di produzione statica . Per ottenere un'istanza, chiamiamo il suo metodo create() e gli passiamo il contesto e l'ID risorsa del suono che vogliamo riprodurre, in questo caso R.raw.soho . Lo dichiariamo come final . Jon Skeet ha fornito una grande spiegazione sul perché lo facciamo here .

one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        //code
    }
});

Infine, impostiamo ciò che farà il nostro pulsante precedentemente inizializzato. Riproduci un suono al clic del pulsante! Per fare ciò, impostiamo OnClickListener del nostro pulsante one . All'interno c'è solo un metodo, onClick() che contiene le istruzioni che il pulsante dovrebbe eseguire al clic .

public void onClick(View v) {
    mp.start();
}

Per riprodurre il suono, chiamiamo il metodo start() di MediaPlayer. Questo metodo avvia la riproduzione del suono.

Lì, ora puoi riprodurre un suono sul pulsante clic in Android!

Parte bonus:

Come notato nel commento qui sotto Grazie Langusten Gustel! e, come raccomandato nella Guida per gli sviluppatori Android , è importante chiamare il metodo release() per liberare risorse che non saranno più utilizzate. Di solito, questo viene fatto una volta che il suono da riprodurre ha completato la riproduzione. Per fare ciò, aggiungiamo un OnCompletionListener al nostro mp modo:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        //code
    }
});

All'interno del metodo onCompletion , lo rilasciamo in questo modo:

public void onCompletion(MediaPlayer mp) {
    mp.release();
}

Ci sono ovviamente modi migliori per implementarlo . Ad esempio, è possibile rendere MediaPlayer una variabile di classe e gestirne il ciclo di vita insieme al ciclo di vita del Fragment o Activity che lo utilizza. Tuttavia, questo è un argomento per un'altra domanda. Per mantenere gli obiettivi di questa risposta piccoli, l'ho scritto solo per illustrare come riprodurre un suono sul pulsante clic in Android .

Post originale

Primo. Dovresti mettere le tue dichiarazioni all'interno di un blocco, e in questo caso il metodo onCreate.

Secondo. Il pulsante è stato inizializzato come variabile, quindi è stata utilizzata una variabile zero e impostato onClickListener su un onClickListener incompleto. Utilizzare la variabile per setOnClickListener.

Terzo, metti la logica per riprodurre il suono all'interno di onClick.

In sintesi:

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class BasicScreenActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);

        Button one = (Button)this.findViewById(R.id.button1);
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
        one.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                mp.start();
            }
        });
    }
}
example how

Come si ottiene un pulsante per riprodurre un suono da grezzo quando si fa clic? Ho appena creato un pulsante con id button1 , ma qualunque sia il codice che scrivo, tutto è sbagliato.

import android.media.MediaPlayer;

public class BasicScreenActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);
    }

    Button one = (Button)this.findViewById(R.id.button1);
    MediaPlayer = mp;
    mp = MediaPlayer.create(this, R.raw.soho);
    zero.setOnCliclListener(new View.OnClickListener() )

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.basic_screen, menu);
        return true;
    }



}



Il modo migliore per farlo è quello che ho trovato dopo aver cercato un problema dopo l'altro nel LogCat

            MediaPlayer mp;
            mp = MediaPlayer.create(context, R.raw.sound_one);
            mp.setOnCompletionListener(new OnCompletionListener() {

                @Override
                public void onCompletion(MediaPlayer mp) {
                    // TODO Auto-generated method stub
                    mp.reset();
                    mp.release();
                    mp=null;
                }

            });
            mp.start();

Non rilasciando il lettore multimediale ti dà questo errore in LogCat:

Android: MediaPlayer finalizzato senza essere rilasciato

Non resettare il lettore multimediale ti dà questo errore in LogCat:

Android: mediaplayer went away with unhandled events

Quindi, riproduci un codice semplice e sicuro per utilizzare il lettore multimediale.

Per suonare più di un suono nella stessa attività / frammento basta cambiare il resID durante la creazione di un nuovo lettore multimediale come

mp = MediaPlayer.create(context, R.raw.sound_two);

e giocaci!

Divertiti!




Button button1=(Button)findViewById(R.id.btnB1);
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b1);
mp1.start();
}
});

Prova questo penso che funzionerà




Related