web-dev-qa-db-fra.com

android - comment faire cliquer un bouton pour lire un fichier son chaque fois que vous appuyez dessus?

J'ai ouvert un nouveau projet -

Maintenant, ce que je voudrais faire est ceci -En appuyant sur le bouton, je veux qu'un fichier mp3 soit lu - et que chaque fois que le bouton est enfoncé, le fichier son recommence à jouer à partir du début - Supposons donc que le mp3 dure 10 secondes et que j'ai appuyé sur le bouton; le fichier est en cours de lecture. Après 4 secondes, j'ai de nouveau appuyé sur le bouton pour que le son soit répété. 

Maintenant, ce que je voudrais savoir, c'est - 1- Où dois-je placer le fichier mp3?

2-quel code dois-je ajouter pour que lorsque le bouton est enfoncé, le fichier mp3 soit lu (appelons le fichier mp3 click_sound.mp3)?

3- Que dois-je ajouter au code pour que le son soit répété chaque fois que j'appuierai sur le bouton?

C’est le code de MainActivity.Java -

package com.example.test1;

import Android.os.Bundle;
import Android.app.Activity;
import Android.view.Menu;

public class MainActivity extends Activity {

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

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

}

et c'est le activity_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"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        Android:id="@+id/button1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/play" />

</RelativeLayout>
16
4this
  1. Vous devriez mettre le fichier mp3 dans le dossier/assets.

  2. place ce code dans la méthode onCreate() après la fonction setContentView()

    final MediaPlayer mp = new MediaPlayer();
    Button b = (Button) findViewById(R.id.button1); 
    
    b.setOnClickListener(new OnClickListener() {
    
        @Override
        public void onClick(View v) {
    
            if(mp.isPlaying())
            {  
                mp.stop();
            } 
    
            try {
                mp.reset();
                AssetFileDescriptor afd;
                afd = getAssets().openFd("AudioFile.mp3");
                mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                mp.prepare();
                mp.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
    
    
        }
    });
    

    3.Le son sera répété chaque fois que vous appuierez sur le bouton. Vous n'avez pas à écrire de code supplémentaire pour cela.

Notez que AudioFile.mp3 est le nom du fichier mp3 dans le dossier/assets

J'espère que cette réponse est utile :)

37
Abhishek V

Si vous devez vraiment appeler le clic par programmation parce que la vue n'a pas de son propre, je le résoudrais comme ça, c'est la solution la plus simple et un oneliner

view.playSoundEffect(SoundEffectConstants.CLICK);

très simple et fonctionne, si vous voulez faire une mise en page jouer un son que vous devez mettre 

Android:soundEffectsEnabled="true"

à la mise en page

2
swisscoder

Je pense que c'est à peu près ce que tu voulais:

public class MainActivity extends Activity {
    String tag;
    static MediaPlayer mp;

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

        tag=getPackageName();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        mp = new MediaPlayer();
        Button b = (Button) findViewById(R.id.button1); 

         b.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                   // MediaPlayer mp = new MediaPlayer();

                    if(!mp.isPlaying())
                    {
                        mp= new MediaPlayer();
                    }
                    try {
                        AssetFileDescriptor afd = getAssets().openFd("AudioFile.mp3");
                        mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                        mp.prepare();
                        mp.start();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            });

        /*b.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                if(mp.isPlaying())
                {  
                    Log.e(tag,"mp is playing");

                    mp.stop();
                    mp.reset();
                    //mp.start();
                } 
                try {

                    AssetFileDescriptor afd;
                    afd = getAssets().openFd("AudioFile.mp3");
                    mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
                    mp.prepare();
                    mp.start();
                  //  mp.release();
                } catch (IllegalStateException e) {
                    Log.e(tag, e.toString());
                    //e.printStackTrace();
                } catch (IOException e) {
                    Log.e(tag, e.toString());

                    //e.printStackTrace();
                }



            }
        });

        mp.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                // TODO Auto-generated method stub
            mp.start(); 
            }
        });*/

    }




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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
2
Mukul Lakhwani

J'ai résolu ceci comme:

public void onClick(View v) {
    sound.start();

    if (sound.isPlaying()) {
        sound.seekTo(0);
        sound.start();
    }
}
0
Hermetika Labs

J'espère que cette démarche vous aidera à aller de l'avant.

1.mettez votre fichier mp3 dans le dossier de la ligne (s'il n'y en a pas, créez-en un -> cliquez à droite sur le projet -> nouveau -> créer un dossier)

2.R & D surgoogle pour lire les MP3 en premier (lecteur multimédia)

3. en cliquant sur le bouton charger ce fichier spécifique (en plaçant le listner sur le bouton)

meilleure chance

0
Kalpesh Lakhani