@LorDDrouS
Учусь создавать android приложения

Как исправить работоспособность service?

Здравствуйте, у меня есть фрагмент, где воспроизводится музыка и service, для того чтобы, при сворачивании музыка продолжала играть. я нажимаю на плей, у меня вылетает из приложения, а если я if(mediaPlayer == null) убираю то начинает работать, только вот пауза еще перестает работать, кто знает в чем проблема?
Service:
public class AudioPlaybackService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener
{
public class AudioPlaybackService extends Service implements MediaPlayer.OnPreparedListener, MediaPlayer.OnCompletionListener
{
    MediaPlayer mediaPlayer;
    public static final String EXTRA_AUDIO_URL = "audio_url";
    String url;
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        if (mediaPlayer == null){
            this.url = intent.getStringExtra(EXTRA_AUDIO_URL);
            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(url);
                mediaPlayer.prepareAsync();
                mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                    public void onPrepared(MediaPlayer mediaPlayer) {
                        mediaPlayer.start();
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        else if(mediaPlayer.isPlaying()){
            mediaPlayer.pause();
        } else {
            mediaPlayer.start();
        }
        return START_STICKY;

    }
    @Override
    public void onCreate()
    {
        super.onCreate();
        mediaPlayer =  new MediaPlayer();
        mediaPlayer.setOnPreparedListener(this);
        mediaPlayer.setOnCompletionListener(this);
    }

    @Override
    public void onCompletion(MediaPlayer mp)
    {
        // called when song has ended
    }

    @Override
    public void onPrepared(MediaPlayer mp)
    {
        mediaPlayer.start();
    }

    @Override
    public IBinder onBind(Intent arg0)
    {
        // TODO Auto-generated method stub
        return null;
    }
}

Fragment(кнопка паузы и старта):
playPause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               serviceIntent.putExtra(AudioPlaybackService.EXTRA_AUDIO_URL, "http://stream3.radiostyle.ru:8003/radioacca");
                getActivity().startService(serviceIntent);
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
if (mediaPlayer == null){
            this.url = intent.getStringExtra(EXTRA_AUDIO_URL);
            try {
                mediaPlayer.reset();

Тут, без сомнения, ошибка. Вы проверяете, что плеер нулл, а потом у него начинаете методы вызывать. Если добавить сюда onCreate, где вы инициализируете плеер, становится понятно, что проверка не нужна.
Зачем вы дважды ставите OnPreparedListener - непонятно.
isPlaying() может возвращать false несколько секунд после start():
It may take some time before the state is updated in calls to isPlaying(), and it can be a number of seconds in the case of streamed content.
ссылка.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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