Можно ли разрешить музыке продолжать играть, когда приложение Android открыто? [Дубликат]

Я предполагаю, что вы конкатенируете что-то в цикле, например

  foreach ($ a as $ b) $ string. = $ b.  '';   

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

  foreach ($ a as $ b) $ result [  ] = $ b;  $ result = implode (',', $ result);   

это решает проблемы с конечным и двойным разделителем, которые обычно возникают при конкатенации

27
задан Rohit 21 November 2011 в 11:45
поделиться

6 ответов

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

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Если вы так серьезно относитесь к тому, чтобы делать это с помощью службы 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() {

    }
}

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

<service android:enabled="true" android:name=".BackgroundSoundService" />
48
ответ дан Eric Kim 15 August 2018 в 18:41
поделиться
  • 1
    Спасибо, это действительно помогло мне! :) – Rohit 22 November 2011 в 10:57
  • 2
    Почему вы не выбрали сервис, который должен контролировать. ? – Rohit 22 November 2011 в 10:59
  • 3
    Спасибо! отлично работает, но у меня проблема с этим кодом. В моем приложении у меня много действий, но я объявил finish () в onPause (). Я хочу играть в bgm во время выполнения намерений, но намеренные вызовы onpause и остановки обслуживания (cz закончить метод в методе onpause). У вас есть какое-то решение? – Hassy31 12 February 2013 в 10:57
  • 4
    Этот ответ правильный, однако вы забываете, что вам также необходимо определить Service в манифесте, чтобы он действительно работал. См. Мой дополнительный ответ ниже о том, как это сделать. – edwoollard 27 March 2016 в 19:29
  • 5
    Может ли кто-нибудь помочь мне в том, как приостановить музыку, используя сервисный подход? Например, если я нажму кнопку «Назад», чтобы перейти к предыдущей операции, музыка перезапустится, а не продолжит работу, где она остановилась. – bangbang 9 September 2017 в 21:46

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

<service
    android:enabled="true"
    android:name="com.package.name.BackgroundSoundService" />
7
ответ дан edwoollard 15 August 2018 в 18:41
поделиться

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

5
ответ дан Jan Højriis Dragsbaek 15 August 2018 в 18:41
поделиться

У меня была проблема запустить его, и я внесли некоторые изменения, чтобы запустить его с 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() {

    }
}
4
ответ дан Nilesh Rathod 15 August 2018 в 18:41
поделиться

Создайте службу переднего плана с флагом 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

1
ответ дан Sapan Diwakar 15 August 2018 в 18:41
поделиться

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

8
ответ дан war_Hero 15 August 2018 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: