Служба фоновой музыки для Android

Разрабатываю развлекательное приложение на android. Я хочу проигрывать фоновую музыку и хочу использовать для этого сервис. В приложении есть 3 занятия, и во всех занятиях должна воспроизводиться музыка. Кроме того, когда деятельность приостановлена, музыка должна ПРИОСТАНОВИТЬСЯ и останавливаться при уничтожении. Может кто подскажет, как это сделать? какие-нибудь ссылки или примеры?

Спасибо.


person Rohit    schedule 21.11.2011    source источник


Ответы (7)


Сделайте это без обслуживания

https://web.archive.org/web/20181116173307/http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Если вы так серьезно относитесь к работе со службами с помощью медиаплеера

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

    }
}

Вызовите эту службу в манифесте. Убедитесь, что в конце строки .BackgroundSoundService нет пробела.

<service android:enabled="true" android:name=".BackgroundSoundService" />
person Synxmax    schedule 21.11.2011
comment
Спасибо, это мне очень помогло! :) - person Rohit; 22.11.2011
comment
Почему вы не предпочли услугу, которую нужно контролировать. ? - person Rohit; 22.11.2011
comment
Спасибо! работает нормально, но у меня проблема с этим кодом. в моем приложении у меня много действий, но я объявил finish () в onPause (). Я хочу играть в bgm во время выполнения намерений, но намерение вызывает onpause и остановку службы (метод cz finish в методе onpause). Есть ли у вас какое-либо решение? - person Hassy31; 12.02.2013
comment
Это правильный ответ, однако вы забываете, что вам также необходимо определить Service в манифесте, чтобы он действительно работал. См. Мой дополнительный ответ ниже о том, как это сделать. - person edwoollard; 27.03.2016
comment
Может кто-нибудь помочь мне, как приостановить музыку, используя сервисный подход? Например, если я нажимаю кнопку «Назад», чтобы вернуться к предыдущему действию, музыка перезапускается, а не продолжается с того места, где она была остановлена. - person bangbang; 10.09.2017
comment
Как я могу остановить сервис от активности, отличной от той, которую я создал? - person Andreas Konstantakos; 19.10.2017
comment
@AndreasKonstantakos использует AudioManager info | информация - person Synxmax; 19.10.2017
comment
Ваша ссылка больше не работает, но вот почти такое же решение github.com/44maagnum/princetron_android/blob/master/src/ - person Tomislav Brabec; 23.05.2018
comment
что здесь idil? - person Anchit; 11.11.2018

слишком поздно для вечеринки, но я все равно добавлю свои 0,02 доллара, Google выпустил бесплатный образец под названием универсальный музыкальный проигрыватель, с помощью которого вы можете научиться транслировать музыку на всех платформах Android (авто, часы, мобильный телефон, телевизор ...), которые он использует сервис для воспроизведения музыки в фоновом режиме, проверить очень полезно. вот ссылка на проект
https://github.com/googlesamples/android-UniversalMusicPlayer

person Mightian    schedule 17.09.2016

@ Synxmax отвечает правильно при использовании классов Service и MediaPlayer, однако вам также необходимо объявить Service в манифесте, чтобы это работало, например:

<service
    android:enabled="true"
    android:name="com.package.name.BackgroundSoundService" />
person edwoollard    schedule 27.03.2016

У меня возникла проблема с его запуском, и я вношу некоторые изменения, чтобы запустить его с исходным файлом mp3. вот BackfrounSoundService.java файл. Считайте, что мой mp3-файл находится в моей SD-карте в моем телефоне.

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

    }
}
person Mahdi Erfanian    schedule 22.09.2015

На HelloAndroid есть отличное руководство по этому поводу. предмет. Фактически, это был первый хит, который я получил в Google. Вам следует попробовать поискать в Google, прежде чем спрашивать здесь, так как это хорошая практика.

person Jan Dragsbaek    schedule 21.11.2011

Создайте службу переднего плана с флагом START_STICKY.

@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;
}

Затем его можно вызвать из любого действия, чтобы воспроизвести музыку.

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)

Вы можете выполнить привязку к службе с помощью bindService и сделать Приостановка / остановка службы из соответствующих методов жизненного цикла активности.

Вот хороший учебник по Воспроизведение музыки в фоновом режиме на Android < / а>

person Sapan Diwakar    schedule 08.11.2016

Я нашел два отличных ресурса, которыми можно поделиться, если кто-нибудь еще встретит эту ветку через Google, это может им помочь (2018). Один из них - это видеоурок, в котором вы на практике увидите, как работает сервис, это хорошо для начинающих.

Ссылка: - https://www.youtube.com/watch?v=p2ffzsCqrs8

Другой - этот веб-сайт, который действительно поможет вам с фоновым аудиоплеером.

Ссылка: - https://www.dev2qa.com/android-play-audio-file-in-background-service-example/

Удачи :)

person Ayush    schedule 21.10.2018