web-dev-qa-db-fra.com

Jouer de la musique de fond dans toutes les activités de l'application Android

Je passe environ 20 heures jusqu'à maintenant et mon problème est toujours là. Je crée une application Android qui comporte plusieurs activités (menu principal, environUs, réglage). J'ai suivi la meilleure réponse ci-dessous lien et c'était OK. La musique jouée en utilisant asyncTask ne s'arrête pas en utilisant cancel

Lorsque je lance mon application (mon code est dans mainActivity), la musique commence et ne s'arrête pas lorsque vous naviguez vers d'autres activités. C’est BON. Mais j’ai mis un ToggleButton dans mon setting_activity Activité que j’espère que ce bouton lance et arrête cette musique. Maintenant, ma question est de savoir comment puis-je arrêter et/ou redémarrer la musique de setting_activity?

dans une autre solution: Je crée une classe MusicManager et j’appelle son démarrage et son arrêt. Mais c’était aussi plusieurs problèmes:

  1. La musique a démarré dans mainMenu_activity, mais n'a été lue que pendant environ 15 secondes, puis s'est arrêtée.
  2. Je ne pouvais pas arrêter la musique d'une autre activité.À ce moment, je joue de la musique dans mainMenua_ctivity car cette ligne code:

    MusicManager mm = new MusicManager(this, R.raw.background_sound);
    mm.play();
    

Comment puis-je arrêter de jouer? 3. La musique s'est arrêtée lorsque je me suis dirigé vers d'autres activités.

public class MusicManager implements OnPreparedListener {

    static MediaPlayer mPlayer;
    Context context;
    private int mySoundId;

    public MusicManager(Context ctx, int musicID) {
        context = ctx;
        mySoundId = musicID;
        mPlayer = MediaPlayer.create(context, mySoundId);
        mPlayer.setOnPreparedListener(this);
    }

    public void play() {
        mPlayer = MediaPlayer.create(context, mySoundId);

    }

    public void stop() {
        mPlayer.stop();
        mPlayer.release();
    }

    @Override
    public void onPrepared(MediaPlayer player) {
        player.start();
        mPlayer.setLooping(true);
        mPlayer.setVolume(25, 25);

    }

}

Enfin, je veux jouer une musique de fond dans toutes les activités sans arrêter/démarrer la musique. Comment puis-je le faire?

8
Mojtaba

Vous pouvez mettre le lecteur de musique dans un service. Cela le rendrait indépendant des activités et vous pourrez toujours contrôler la lecture de manière intentionnelle.

Voici quelques exemples de code à ce sujet: https://stackoverflow.com/a/8209975/2804473 Le code ci-dessous est écrit par Synxmax ici à StackOverflow et est décrit dans le lien ci-dessus:

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    MediaPlayer player;
    public IBinder onBind(Intent arg0) {

        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.idil);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);

    }
    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return 1;
    }

    public void onStart(Intent intent, int startId) {
        // TO DO
    }
    public IBinder onUnBind(Intent arg0) {
        // TO DO Auto-generated method
        return null;
    }

    public void onStop() {

    }
    public void onPause() {

    }
    @Override
    public void onDestroy() {
        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory() {

    }
}
public class serv extends Service{

    MediaPlayer mp;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
    public void onCreate()
    {   
        mp = MediaPlayer.create(this, R.raw.b);
        mp.setLooping(false);
    }
    public void onDestroy()
    {       
        mp.stop();
    }
    public void onStart(Intent intent,int startid){

        Log.d(tag, "On start");
        mp.start();
    }
}
0
mahesh talaviya
 @Override
    public void onCreate (){
      super.onCreate();

       Player = MediaPlayer.create(this, R.raw.jingle);
       mPlayer.setOnErrorListener(this);

       if(mPlayer!= null)
        {
            mPlayer.setLooping(true);
            mPlayer.setVolume(100,100);
        }


        mPlayer.setOnErrorListener(new OnErrorListener() {

      public boolean onError(MediaPlayer mp, int what, int
          extra){

            onError(mPlayer, what, extra);
            return true;
        }
          });
    }
0
mahesh talaviya