2011-12-10 39 views
0

我正在制作一个带有服务的音乐播放器,但是当我点击音乐列表中的一首歌曲时,音乐开始时没有错误,但是如果我回到列表并单击另一个,我会得到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

尝试再次调用prepare之前调用reset()方法。 另外,如果您正在调用prepare()而不prepareAsync(),我不明白为什么您需要使用准备好的侦听器。

+0

我打电话重置()之前准备..?我需要准备好的听众确保音乐准备就绪,然后才能像music.getDuration那样调用,否则会出现错误。 – Piratkopia13