将原始数据源设置为mediaplayer singleton

时间:2012-03-02 13:01:53

标签: android android-mediaplayer

我正准备将媒体播放器设置为单身,以便可以通过我项目中的各种活动来控制它。许多研究使我得到了以下代码。

if (current_player == null)
{
    try
    {
        current_player = MusicPlayer.getInstance();
        AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.mytune);
        current_player.setDataSource(afd.getFileDescriptor());
        current_player.prepare();
        current_player.setLooping(true);
        current_player.start();
        afd.close();
}
catch (IllegalArgumentException e) { Log.e("IllegalArgumentException", "error: " + e.getMessage(), e);   } 
catch (IllegalStateException e) {Log.e("IllegalStateException", "error: " + e.getMessage(), e); } 
catch (IOException e) {Log.e("IOException", "error: " + e.getMessage(), e); } 
catch (Exception e){    Log.e("Main media player", "error: " + e.getMessage(), e);
        }

我知道这一点 1.正在创建MediaPlayer 2. AssetFileDescriptor用于正确的文件

代码在带有IOException的.setDataSource行失败 错误:setDataSourceFD失败:状态= 0x80000000

该代码故意类似于各种论坛上显示的许多示例,声称它应该有效。 要明确我已经证明了

current_player= MediaPlayer.create(this, R.raw.mytune);

工作正常。

我会非常感谢任何建议。

1 个答案:

答案 0 :(得分:4)

将文件放在资产目录中。 AssetFileDescriptor afd = ...

AssetFileDescriptor afd = context.getAssets().openFd(fileName);
current_player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength() );