Jouer le son sur le bouton cliquer android

Comment puis-je obtenir un bouton pour jouer un son de raw quand je clique? Je viens de créer un bouton avec l'id button1 , mais le code que j'écris, tout est faux.

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



}
77
demandé sur Bill the Lizard 2013-08-27 11:08:36

7 réponses

C'est la partie la plus importante du code fourni dans le post original.

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

Pour l'expliquer, étape par étape:

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

la première est l'initialisation du bouton à utiliser pour jouer le son. Nous utilisons les findViewById , passer L'Id que nous lui avons assigné (dans le cas de cet exemple: R.id.button1 ), pour obtenir le bouton dont nous avons besoin. Nous avons jeté comme un Button de sorte qu'il est facile de l'affecter à la variable one que nous sommes en train d'initialiser. Expliquer davantage comment cela fonctionne est hors de portée pour cette réponse. Ce donne un bref aperçu de la façon dont il fonctionne.

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

voici comment initialiser un MediaPlayer . Le MediaPlayer suit le modèle de conception statique de la méthode D'usine . Pour obtenir une instance, nous appelons son create() méthode et passer le contexte et l'Id de ressource du son que nous voulons jouer, dans ce cas R.raw.soho . Nous le déclarons comme final . Jon Skeet a fourni une excellente explication sur la raison pour laquelle nous le faisons ici .

one.setOnClickListener(new OnClickListener(){

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

enfin, nous définissons ce que notre bouton précédemment initialisé fera. Jouer un son sur un clic de bouton! Pour ce faire, nous paramétrons le OnClickListener de notre bouton one . Est à l'intérieur d'une seule méthode, onClick() qui contient quelles instructions le bouton devrait faire sur le clic .

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

pour jouer le son, nous appelons la méthode de MediaPlayer" 1519530920 start() 1519320920". Cette méthode commence la lecture du son.

là, vous pouvez maintenant jouer un son sur un clic de bouton dans Android!


partie Bonus:

comme indiqué dans le commentaire en dessous de Merci Langusten Gustel! , et comme recommandé dans la référence développeur Android , il est important d'appeler la release() méthode pour libérer des ressources qui ne seront plus utilisées. Habituellement, ceci est fait une fois que le son à jouer est terminé. Pour ce faire, nous ajoutons un OnCompletionListener à notre mp comme suit:

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

à L'intérieur de la méthode onCompletion , nous la libérons comme ainsi:

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

Il y a évidemment des , de meilleures façons de mettre en œuvre . Par exemple, vous pouvez faire de MediaPlayer une variable de classe et gérer son cycle de vie avec le cycle de vie du Fragment ou Activity qui l'utilise. Toutefois, il s'agit d'un sujet pour une autre question. Pour maintenir la portée de cette réponse petit, je l'ai écrit juste pour illustrer comment jouer un son sur le bouton cliquez sur Android .


Post Original

D'abord. Vous devriez mettre vos déclarations à l'intérieur d'un bloc, et dans ce cas la méthode onCreate.

à la Seconde. Vous avez initialisé le bouton comme variable un , puis vous avez utilisé une variable zéro et réglé son onClickListener à un incomplet onClickListener. Utilisez la variable one pour le setOnClickListener.

Troisièmement, mettez la logique pour jouer le son à l'intérieur du clic.

en résumé:

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();
            }
        });
    }
}
164
répondu Keale 2018-06-20 01:55:57

testé et opérationnel à 100%

public class MainActivity extends ActionBarActivity {
    Context context = this;
    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mp = MediaPlayer.create(context, R.raw.sound);
        final Button b = (Button) findViewById(R.id.Button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        mp = MediaPlayer.create(context, R.raw.sound);
                    } mp.start();
                } catch(Exception e) { e.printStackTrace(); }
            }
        });
    }
}

C'est tout ce que nous avions à faire

if (mp.isPlaying()) {
    mp.stop();
    mp.release();
    mp = MediaPlayer.create(context, R.raw.sound);
}
30
répondu DeathRs 2015-08-25 14:47:11

la meilleure façon de faire ceci est ici que j'ai trouvé après la recherche d'un problème après l'autre dans le 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();

Pas libérer "les 151970920" le Media player vous donne cette erreur dans le LogCat:

Android: MediaPlayer finalisé sans être libéré

Non réinitialisation le lecteur multimédia vous donne cette erreur dans LogCat:

Android: mediaplayer went away with unhandled events

donc jouer code sûr et simple à utiliser media player.

pour jouer plus d'un son dans la même activité / Fragment il suffit de changer le resID tout en créant un lecteur de nouveaux médias comme

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

et jouez-le !

amusez-vous bien!

24
répondu sud007 2018-07-18 01:43:17
import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    MediaPlayer mp;
    Button one;

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

        mp = MediaPlayer.create(this, R.raw.soho);
        one = (Button)this.findViewById(R.id.button1);

        one.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mp.start();
            }
        });
    }
}
7
répondu Auto-Droid ツ 2018-07-18 01:01:57
  • l'audio doit être placé dans le dossier raw , s'il n'existe pas, en créer un.
  • le dossier brut doit être à l'intérieur du dossier res
  • le nom ne doit pas comporter de - ou de caractères spéciaux.

sur votre activité, vous devez avoir un objet MediaPlayer , à l'intérieur de la méthode onCreate ou la méthode onclick , vous devez initialiser le MediaPlayer , comme MediaPlayer.create(this, R.raw.name_of_your_audio_file) , puis votre fichier audio ir prêt à être joué avec l'appel pour start() , dans votre cas, puisque vous voulez qu'il soit placé dans un bouton, vous aurez à le mettre à l'intérieur de la méthode onClick .

exemple:

private Button myButton;
private MediaPlayer mp;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);
        mp = MediaPlayer.create(this, R.raw.gunshot);

        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();
            }
        });
}
}
2
répondu res 2018-08-10 19:12:44
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();
}
});

Essayez cela, je pense que cela fonctionnera

1
répondu Uzzal Prasad 2017-12-10 18:58:28

public class MainActivity extends Appcompatibility {

public void clickMe (View view) {

    MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
    mp.start();

}

créer un bouton avec une méthode pourrait être appelé lorsque le bouton appuyé (oncCeate),

créez ensuite une variable pour la classe (MediaPlayer) avec le chemin de votre fichier

MediaPlayer mp = MediaPlayer.créer(ce, R. raw.xxx);

enfin lancer la méthode de départ dans cette classe

mp.start ();

le fichier s'exécute lorsque le bouton est appuyé, j'espère que cela a été utile!

0
répondu NEC 2018-05-16 16:58:10