Проигрывание музыки BG через операции в Android

Здравствуйте! В первый раз, который задаст вопрос здесь в stackoverflow. Возбуждение! Ха-ха.

Мы разрабатываем игру Android, и мы играем некоторую фоновую музыку для нашего введения (у нас есть Вводное Действие), но мы хотим, чтобы это продолжило подыграло следующему Действию и возможно могло остановить или играть музыку снова отовсюду в рамках приложения.

Что мы делаем, в данный момент игра bgm использование MediaPlayer при нашем Вводном Действии. Однако мы останавливаем музыку, как только пользователь оставляет то Действие. Мы должны использовать что-то как Сервисы для этого? Или MediaPlayer/SoundPool достаточно? Если бы кто-либо знает ответ, мы с удовольствием ценили бы Ваше совместное использование его с нами.Спасибо!

31
задан Matthieu Brucher 31 December 2018 в 13:25
поделиться

4 ответа

Если я правильно понимаю вашу ситуацию, то я несколько раз сталкивался с той же проблемой. Я использую другой поток для воспроизведения музыки в своих приложениях. Эта реализация передает статическую ссылку на Context, который, как я знаю, будет активен в то время, когда будет играть музыка.

public class AudioPlayer extends Thread {
private Context c;
private Thread blinker;
private File file;

public AudioPlayer (Context c, File file) {
    this.c = c;
    this.file = file;
}

public void go () {
    blinker = this;
    if(!blinker.isAlive()) {
        blinker.start();
    }
}

public void end () {
    Thread waiter = blinker;
    blinker = null;
    if (waiter != null)
        waiter.interrupt ();
}

public void run () {
    MediaPlayer ap = MediaPlayer.create(c, Uri.fromFile(file));
    int duration = ap.getDuration();
    long startTime = System.currentTimeMillis();
    ap.start();
    try {
        Thread thisThread = Thread.currentThread();
        while (this.blinker == thisThread && System.currentTimeMillis() - startTime < duration) {           
            Thread.sleep (500);  // interval between checks (in ms)
        }
        ap.stop ();
        ap.release ();
        ap = null;
    } catch (InterruptedException e) {
        Log.d("AUDIO-PLAYER", "INTERRUPTED EXCEPTION");
        ap.stop ();
        ap.release();
        ap = null;
    }
    }
}
2
ответ дан 27 November 2019 в 22:50
поделиться

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

Вы можете создать Uri для локального ресурса, используя Uri uri = Uri.parse ("android.resource: //com.stackoverlof.android/raw/ beep.mp3 "); .

Надеюсь, это поможет.

1
ответ дан 27 November 2019 в 22:50
поделиться

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

Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc); //OR stopService(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) {
        // TODO



    }
    public IBinder onUnBind(Intent arg0) {
        // TODO Auto-generated method stub

        return null;
    }

    public void onStop() {

    }
    public void onPause() {

    }
    @Override
    public void onDestroy() {

        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory() {

    }
}
9
ответ дан 27 November 2019 в 22:50
поделиться

Создайте статический SoundManager, используя SoundPools или MediaPlayers.

Создайте статический флаг keepMusicGoing.

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

При переключении действий установите для keepMusicGoing значение true.

В событии onStop ваших действий проверьте, истинно ли keepMusicGoing, если да, оставьте музыку включенной, а затем установите для keepMusicGoing значение false.

Если они нажмут кнопку «Домой», флаг keepMusicGoing будет ложным, поэтому воспроизведение музыки прекратится, когда активность потеряет фокус.

Напишите мне, и я могу отправить вам пару менеджеров звука, которые я написал, один использует MediaPlayers, а другой - SoundPools

Чад

6
ответ дан 27 November 2019 в 22:50
поделиться
Другие вопросы по тегам:

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