web-dev-qa-db-fra.com

Jouer son sur le bouton, cliquez sur android

Comment puis-je obtenir un bouton pour jouer un son à partir de raw lorsque vous cliquez? Je viens de créer un bouton avec l'ID button1, mais quel que soit 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;
    }



}
83
Dmitry

C’est la partie la plus importante du code fourni dans le message 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);

Le premier est l’initialisation du bouton à utiliser pour jouer le son. Nous utilisons le findViewById de l'Activité en passant l'ID que nous lui avons attribué (dans le cas de cet exemple: R.id.button1), pour obtenir le bouton dont nous avons besoin. Nous le lançons sous la forme Button afin qu'il soit facile de l'attribuer à la variable one que nous sommes en train d'initialiser. Expliquer plus comment cela fonctionne est hors de portée pour cette réponse. This donne un bref aperçu de son fonctionnement.

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

Voici comment initialiser un MediaPlayer . MediaPlayer suit le modèle de conception de la méthode d'usine statique . Pour obtenir une instance, nous appelons sa méthode create() et lui transmettons le contexte et l'identifiant de la 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 fera notre bouton précédemment initialisé. Jouez un son en cliquant sur le bouton! Pour ce faire, nous définissons le OnClickListener de notre bouton one. À l’intérieur, il n’ya qu’une méthode, onClick(), qui contient les instructions à suivre par le bouton au clic.

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

Pour lire le son, nous appelons la méthode start() de MediaPlayer. Cette méthode démarre la lecture du son.

Là, vous pouvez maintenant jouer un son sur le clic du bouton dans Android!


Partie bonus:

Comme indiqué dans le commentaire ci-dessousMerci Langusten Gustel!et comme recommandé dans le manuel de référence du développeur Android , il est important d'appeler la méthode release() pour libérer des ressources qui ne seront plus utilisées. Cela se fait généralement une fois que le son à jouer est terminé. Pour ce faire, nous ajoutons un OnCompletionListener à notre mpcomme suit:

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

Dans la méthode onCompletion, nous le publions comme suit:

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

Il existe évidemment de meilleurs moyens de mettre en œuvre ceci. Par exemple, vous pouvez définir le MediaPlayer comme une variable de classe et gérer son cycle de vie, ainsi que le cycle de vie de Fragment ou Activity qui l'utilise. Cependant, ceci est un sujet pour une autre question. Afin de limiter la portée de cette réponse, je l’ai écrite juste pour illustrer comment jouer un son lors d’un clic sur un bouton sous Android.


Poste originale

Premier. Vous devez placer vos instructions dans un bloc, et dans ce cas la méthode onCreate.

Seconde. Vous avez initialisé le bouton en tant que variable un, alors vous avez utilisé une variable zéro et définissez son onClickListener sur un onClickListener incomplet. Utilisez la variable un pour setOnClickListener.

Troisièmement, mettez la logique pour jouer le son dans le onClick.

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

Testé et fonctionnel à 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'était tout ce que nous avions à faire

if (mp.isPlaying()) {
    mp.stop();
    mp.release();
    mp = MediaPlayer.create(context, R.raw.sound);
}
33
DeathRs

La meilleure façon de faire est ici que j'ai trouvé après avoir recherché 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érant le lecteur multimédia vous donne cette erreur dans LogCat:

Android: MediaPlayer finalisé sans être publié

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

Android: mediaplayer went away with unhandled events

Alors jouez un code simple et sûr pour utiliser le lecteur multimédia.

Pour lire plusieurs sons dans la même activité/le même fragment, il suffit de changer le numéro d'identification lors de la création d'un nouveau lecteur multimédia, comme par exemple

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

et y jouer!

S'amuser!

28
sud007
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();
            }
        });
    }
}
8
Auto-Droid ツ
  • Le fichier audio doit être placé dans le dossier raw. S'il n'existe pas, créez-en un.
  • Le dossier brut doit être à l'intérieur du dossier res
  • Le nom ne doit contenir ni - ni caractères spéciaux.

Dans votre activité, vous devez avoir un objet MediaPlayer, dans la méthode onCreate ou la méthode onclick, vous devez initialiser la MediaPlayer, comme MediaPlayer.create(this, R.raw.name_of_your_audio_file), puis votre fichier audio est prêt à être lu avec l'appel à start(), dans votre cas, puisque vous souhaitez le placer dans un bouton, vous devez l'insérer dans 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();
            }
        });
}
}
4
res
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 ceci, je pense que ça va marcher

1
Uzzal Prasad

classe publique MainActivity étend AppCompatActivity {

public void clickMe (View view) {

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

}

créer un bouton avec une méthode peut être appelé lorsque le bouton est enfoncé (oncCeate), 

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

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

enfin exécuter la méthode de démarrage dans cette classe 

p.start ();

le fichier fonctionnera lorsque le bouton sera enfoncé, espérons que cela aura été utile!

0
NEC

si le bouton sert à l'enregistrement ou à une autre fonction liée au support, vous avez des sons prédéfinis: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING. 

Agréable! 

MediaActionSound 

Classe de production de sons correspondant à ceux générés par diverses actions entreprises par les API média et caméra. Docs

utiliser comme:

fun playBeepSound() {
    val sound = MediaActionSound()
    sound.play(MediaActionSound.START_VIDEO_RECORDING)
}
0
Dan Alboteanu

Au lieu de le réinitialiser comme proposé par DeathRs:

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

nous pouvons simplement réinitialiser le MediaPlayer pour qu’il commence à utiliser:

if (mp.isPlaying()) {
       mp.seekTo(0)
}
0
Mikołaj Karwowski