Я делаю музыкальный проигрыватель с сервисом, но когда я щелкаю песню в списке музыки, музыка запускается без ошибок, но если я вернусь к списку и щелкну другую, я получаю Attempt to call getDuration without a valid mediaplayer error (-38, 0)

Мой метод onStart в сервисе:

@Override
public void onStart(final Intent i, int startid) {
    Log.d(TAG, "Start music");

    re = 0;

    songUrl = i.getData().toString();

    streamMusic = new Thread() {
        public void run() {
            Looper.prepare();
            try {
                re = 1;
                music.reset();
                music.setDataSource(songUrl);
                music.prepare();

                this.interrupt();

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    streamMusic.start();

}

Я запускаю службу с startService(i); и устанавливаю music.setOnPreparedListener, поэтому ничего не запускается слишком рано.

Как заставить его работать?

0
Piratkopia13 10 Дек 2011 в 20:55

1 ответ

Попробуйте вызвать метод reset() перед повторным вызовом prepare. Кроме того, если вы вызываете prepare(), а не prepareAsync(), я не понимаю, почему вам нужно использовать подготовленный слушатель.

0
momo 10 Дек 2011 в 22:20
Я вызываю reset() перед подготовкой..? Мне нужен подготовленный слушатель, чтобы убедиться, что музыка подготовлена, прежде чем я позвоню как music.getDuration или я получу ошибку.
 – 
Piratkopia13
11 Дек 2011 в 02:28