web-dev-qa-db-fra.com

Android service de musique de fond

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.

31
Rohit

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" />
55
Synxmax

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" />
8
edwoollard

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() {

    }
}
4
Mahdi Erfanian

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.

4
Jan Dragsbaek

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

2
Sapan Diwakar

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 :)

0
Ayush