2

我的媒体播放器在闲置一段时间后延迟启动,也有一段时间不播放音频。

之前我用过setDataSource(),这次我用了create()

作为参考,这是我正在使用的代码:

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();
4

3 回答 3

1

我也有start()的延迟问题。我在onPrepared中使用mp.seekTo(0)修复它,如下所示:

mp.setOnPreparedListener(new OnPreparedListener(){
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.seekTo(0);
        mp.start();
    }
});
于 2016-03-27T16:55:47.387 回答
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 状态图

于 2013-08-01T09:24:46.160 回答
-2

我想如果你愿意改变

mp.prepareAsync();

mp.prepare();

并放

mp.start();

mp.prepare() 之后;您的代码将起作用。试试看。

于 2013-08-01T09:37:27.230 回答