Как приостановить службу фоновой музыки при выходе / приостановке приложения? - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу, чтобы фоновая музыка играла, пока пользователь играет в игру.Музыка запускается, когда пользователь запускает приложение, приостанавливается, когда он покидает его, и возобновляется, когда они возвращаются в приложение.

Я пытался использовать этот метод , я немного его отредактировал:

public class MainActivity extends Activity {

    private boolean bounded;
    private BackgroundSoundService backgroundSoundService;

    ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceDisconnected( ComponentName name ) {
            bounded = false;
            backgroundSoundService = null;
        }

        @Override
        public void onServiceConnected( ComponentName name, IBinder service ) {
            bounded = true;
            BackgroundSoundService.LocalBinder localBinder = (BackgroundSoundService.LocalBinder) service;
            backgroundSoundService = localBinder.getServiceInstance();
        }
    };

    @Override
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);
        // (code that's not necessary)

        backgroundSoundService.start(); // this is where the error is thrown
    }

    @Override
    public void onPause() {
        super.onPause();

        backgroundSoundService.pause();
    }

    @Override
    public void onResume() {
        super.onResume();

        backgroundSoundService.resume();
    }

    @Override
    public void onStop() {
        super.onStop();

        backgroundSoundService.pause();
    }

    @Override
    public void onStart() {
        super.onStart();

        Intent intent = new Intent(this, BackgroundSoundService.class);
        bindService(intent, connection, BIND_AUTO_CREATE);

        backgroundSoundService.start();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        backgroundSoundService.destroy();
    }
}

Я использую упражнение для воспроизведения, приостановки и возобновления фоновой музыки.Я опущу ненужные методы / строки для этого вопроса здесь:

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    public IBinder binder = new LocalBinder();

    public IBinder onBind( Intent arg0 ) {
        return binder;
    }

    public IBinder onUnBind( Intent arg0 ) {
        return null;
    }

    public class LocalBinder extends Binder {
        public BackgroundSoundService getServiceInstance() {
            return BackgroundSoundService.this;
        }
    }
}

Однако, когда я запускаю приложение, я получаю NullPointerException в классе MainActivity (в методе onCreateЯ прокомментировал это в коде.)

Кажется, переменная еще не инициализирована, но мне нужно запустить музыку, когда пользователь открывает приложение.

Я также пыталсяудаление backgroundSoundService.start(); из метода onCreate, чтобы музыка запускалась при вызове onStart.Однако, когда я это делаю, я получаю ту же ошибку.

Итак, как я могу инициализировать backgroundSoundService, прежде чем он будет использован для вызова своих методов?

1 Ответ

0 голосов
/ 26 февраля 2019

прежде всего удалите это backgroundSoundService.start() из onCreate и добавьте его в onServiceConnected() метод

вам нужно проверить нулевое значение, прежде чем делать какие-либо вещи, связанные с backgroundSoundService, как показано ниже

 @Override
    public void onPause() {
        super.onPause();
        if(backgroundSoundService != null){
           backgroundSoundService.pause();
        }
    }

addэтот вид нулевой проверки во всех случаях backgroundSoundService

...