5 votes

Jouer un son en cliquant sur un bouton dans Android

Je suis nouveau sur Android, et j'essaie de faire quelque chose de simple comme lire un MP3 personnalisé lorsqu'un bouton est cliqué. Cela semble être un assez commun pregunta Mais même si mon code suit les exemples et que je n'obtiens aucune erreur, je n'entends aucun son, que ce soit dans le simulateur ou dans un téléphone réel.

Mon MainActivity.java :

public class MainActivity extends Activity {

    private static final String TAG = "MyActivity";

    public void MyActivity(Bundle onSavedStateInstance) {
        Log.v(TAG, "Initializing sounds...");

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

        Button play_button = (Button)this.findViewById(R.id.play_button);
        play_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.v(TAG, "Playing sound...");
                mp.start();
            }
        });
        Log.v(TAG, "Sounds initialized.");
    }

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

Et mon activité_main.xml :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:padding="@dimen/padding_medium"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

    <Button
        android:id="@+id/play_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/play_button" />

</RelativeLayout>

Je développe en utilisant le plugin Eclipse, qui ne montre aucune erreur et semble exécuter l'application correctement dans le simulateur ou le téléphone réel, mais lorsque je clique sur le bouton de lecture, rien ne se passe. Je ne sais pas si le simulateur prend en charge le son (mais je suppose que c'est le cas) et j'ai confirmé que le son n'est pas coupé sur mon téléphone.

Qu'est-ce que je fais de mal ?

De plus, mes déclarations de journalisation ne sont affichées nulle part, ni dans la console d'Eclipse ni dans le panneau LogCat. Devrais-je les voir imprimées quelque part ?

10voto

Raghav Sood Points 43264

Cela ne fonctionnera pas pour une raison très simple : MonActivité() n'est jamais appelée.

Android appellera la méthode onCreate() de votre activité, mais tout autre appel de méthode doit être effectué par vous. Comme vous n'appelez jamais la méthode MyActivity(), le bouton ne reçoit jamais de onClickListener(), et le son n'est jamais joué. Essayez d'utiliser le code suivant à la place :

public class MainActivity extends Activity {

    private static final String TAG = "MyActivity";

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

        Log.v(TAG, "Initializing sounds...");

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

        Button play_button = (Button)this.findViewById(R.id.play_button);
        play_button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Log.v(TAG, "Playing sound...");
                mp.start();
            }
        });
        Log.v(TAG, "Sounds initialized.");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

3voto

gian1200 Points 1766

Vous devriez placer votre code à l'intérieur de onCreate et après setContentView() puisque votre méthode/constructeur public void MyActivity(Bundle onSavedStateInstance) n'est jamais appelé, donc votre code n'est jamais exécuté. Quelque chose comme ceci :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.v(TAG, "Initializing sounds...");
    final MediaPlayer mp = MediaPlayer.create(this, R.raw.alarma_67560);
    Button play_button = (Button)this.findViewById(R.id.play_button);
    play_button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Log.v(TAG, "Playing sound...");
            mp.start();
        }
    });
    Log.v(TAG, "Sounds initialized.");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X