Je développe un jeu simple où 3 activités (menu, paramètres et liste de classement) ont besoin d'une musique de fond qui devrait jouer doucement en arrière-plan, même si par exemple l'utilisateur quitte menu et va dans les paramètres, puis de retour.Service avec MediaPlayer ne s'arrête pas lors de la fermeture de l'application - Android
Pour cela j'ai créé un service qui fonctionne parfaitement. Il n'y a qu'un problème majeur: lorsque l'application est fermée (l'utilisateur appuie sur le bouton d'accueil par exemple), la musique n'arrête pas de jouer.
J'ai essayé avec onDestroy, onStop, onPause mais le problème n'est pas résolu.
Service:
package com.android.migame;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.IBinder;
public class Meni_music extends Service implements OnCompletionListener {
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.menu);
player.setLooping(true); // Set looping
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}
public IBinder onUnBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
player.stop();
player.release();
stopSelf();
}
@Override
public void onLowMemory() {
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
}
}
Menu:
package com.android.migame;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
public class Meni extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.meni);
startService(new Intent(Meni.this,Meni_music.class));
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
}
Dans le 'OnPause()', l'activité, appelez une méthode service pour lui dire d'arrêter de jouer. Semblable à votre 'OnDestroy()' dans votre service. – Doomsknight
onPause est appelée chaque fois que je vais à une autre activité comme les paramètres. J'ai créé le service parce que je veux que la musique joue doucement sur plusieurs services. – Soriyyx
Vous avez raison. Ajoutez-le à la touche du bouton d'accueil peut-être? Donc, lorsque la touche enfoncée, et est à la maison, arrêtez. – Doomsknight