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;
}
}
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 mp
comme 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.
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();
}
});
}
}
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);
}
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!
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();
}
});
}
}
raw
. S'il n'existe pas, créez-en un.-
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();
}
});
}
}
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
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!
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)
}
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)
}