2011-02-04 177 views
1


我不知道这是否是一个常见问题,但我的媒体播放器延迟启动时保持空闲一段时间,也有一段时间它不播放音频。
早些时候,我使用的setDataSource(),但这次我使用创建(),不知道什么是对这个问题的真正原因........

Android:媒体播放器延迟启动

仅供参考这是代码我使用.......

AssetFileDescriptor afd = _context.getResources().openRawResourceFd(this._soundResource.get(this._toBePlayed)); 
     mp = new MediaPlayer(); 
     mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
     afd.close(); 
     mp.setOnPreparedListener(new OnPreparedListener(){ 

      @Override 
      public void onPrepared(MediaPlayer mp) { 

       mp.start(); 
      } 
     }); 
     mp.setOnCompletionListener(new OnCompletionListener(){ 

      @Override 
      public void onCompletion(MediaPlayer mp) { 

       mp.reset(); 
       mp.release(); 
      } 
     }); 
     mp.prepareAsync(); 

回答

0

我用一个FileInputStream。您没有设置AudioStreamType。这是我如何设置我的MediaPlayer。

public void setupMediaPlayer(){ 
    mp = new MediaPlayer(); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    try { 
     fis = new FileInputStream(tempFilePath); 
     mp.setDataSource(fis.getFD()); 
     mp.prepare(); 
     mp.setOnPreparedListener(this); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

tempFilePath是文件路径。

我还在这个类中实现了setOnPreparedListener,这使得我的代码更具可读性。

也很大链接参考:MediaPlayer State Diagram

-1

我想,如果你会改变

mp.prepareAsync(); 

mp.prepare(); 

,并把

mp.start(); 

AFTE r处的mp.prepare();您的代码将工作。试一试。

+0

这并不能解决问题:我mp.seekTo(0)onPrepared这样固定它。相反,这会阻止主线程。 UI/UX非常糟糕。 – 2017-12-08 06:46:07

0

我也有延迟问题的的start()

mp.setOnPreparedListener(new OnPreparedListener(){ 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.seekTo(0); 
     mp.start(); 
    } 
});