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:
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?
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();
}
}
@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;
}
});
}