Je développe une application de divertissement sur Android. Je veux jouer de la musique de fond et je veux utiliser le service pour cela. L'application a 3 activités et la musique doit être jouée dans toutes les activités. De plus, lorsque l'activité est suspendue, la musique doit PAUSE et s'arrêter lorsqu'elle est détruite. Quelqu'un peut-il me dire comment faire cela ? des liens ou des exemples?
Merci.
Faites-le sans service
http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion
Si vous êtes si sérieux à propos de le faire avec des services en utilisant mediaplayer
Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc);
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() {
}
}
Veuillez appeler ce service dans Manifest Assurez-vous qu'il n'y a pas d'espace à la fin de la chaîne .BackgroundSoundService
<service Android:enabled="true" Android:name=".BackgroundSoundService" />
La réponse de @ Synxmax est correcte lorsque vous utilisez une classe Service
et MediaPlayer
, mais vous devez également déclarer Service
dans le manifeste pour que cela fonctionne, comme ceci:
<service
Android:enabled="true"
Android:name="com.package.name.BackgroundSoundService" />
j'ai eu du mal à l'exécuter et j'ai fait quelques changements pour l'exécuter avec la source mp3. Voici BackfrounSoundService.Java
fichier. considérez que mon fichier mp3 est dans ma carte SD dans mon téléphone.
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();
Log.d("service", "onCreate");
player = new MediaPlayer();
try {
player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3");
} catch (IOException e) {
e.printStackTrace();
}
player.setLooping(true); // Set looping
player.setVolume(100, 100);
}
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("service", "onStartCommand");
try {
player.prepare();
player.start();
} catch (IOException e) {
e.printStackTrace();
}
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() {
}
}
Theres un excellent tutoriel sur ce sujet à HelloAndroid concernant ce même sujet. En fait, c'était le premier succès que j'ai obtenu sur Google. Vous devriez essayer de googler avant de demander ici, car c'est une bonne pratique.
Créez un service de premier plan avec le START_STICKY
drapeau.
@Override
public int onStartCommand(Intent startIntent, int flags, int startId) {
if (startIntent != null) {
String action = startIntent.getAction();
String command = startIntent.getStringExtra(CMD_NAME);
if (ACTION_CMD.equals(action)) {
if (CMD_PAUSE.equals(command)) {
if (mPlayback != null && mPlayback.isPlaying()) {
handlePauseRequest();
}
} else if (CMD_PLAY.equals(command)) {
ArrayList<Track> queue = new ArrayList<>();
for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) {
queue.add((Track) Parcels.unwrap(input));
}
int index = startIntent.getIntExtra(ARG_INDEX, 0);
playWithQueue(queue, index);
}
}
}
return START_STICKY;
}
Cela peut ensuite être appelé depuis n'importe quelle activité pour jouer de la musique
Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.Java)
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks)
intent.putExtra(MusicService.ARG_INDEX, position)
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY)
activity.startService(intent)
Vous pouvez vous lier au service à l'aide de bindService et pour interrompre/arrêter le service à partir des méthodes de cycle de vie d'activité correspondantes.
Voici un bon tutoriel sur Lecture de musique en arrière-plan sur Android
J'ai trouvé deux excellentes ressources à partager.Si quelqu'un d'autre tombe sur ce sujet via Google, cela peut les aider (2018). L'un est ce didacticiel vidéo dans lequel vous verrez pratiquement comment fonctionne le service, c'est bon pour les débutants.
Lien: - https://www.youtube.com/watch?v=p2ffzsCqrs8
Autre est ce site Web qui vous aidera vraiment avec le lecteur audio de fond.
Lien: - https://www.dev2qa.com/Android-play-audio-file-in-background-service-example/
Bonne chance :)