MediaPlayer出现无法解释的错误

时间:2010-02-21 13:47:17

标签: android

我的代码尝试从res / raw播放MP3文件。

代码:

FileDescriptor fd = appContext.getResources().openRawResourceFd(R.raw.ringtone)
                    .getFileDescriptor();
player = new MediaPlayer();
            try
            {
                player.setAudioStreamType(AudioManager.STREAM_RING);
                player.setDataSource(fd);
                player.prepare();           
            }
            catch (IllegalArgumentException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }
            catch (IllegalStateException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
                player = null;
                return;
            }

            player.setLooping(true);
            player.start();

日志显示:

02-21 15:18:18.360:ERROR / PlayerDriver(51):命令PLAYER_SET_DATA_SOURCE已完成,但出现错误或信息PVMFErrNotSupported 02-21 15:18:18.380:ERROR / MediaPlayer(693):错误(1,-4) 02-21 15:18:18.390:WARN / PlayerDriver(51):PVMFInfoErrorHandlingComplete

调用player.prepare()之后。

我真的没有提示。 我不会使用MediaPlayer.create(),因为我需要player.setAudioStreamType(AudioManager.STREAM_RING);

非常感谢任何帮助...

2 个答案:

答案 0 :(得分:3)

来自MediaPlayer API docs

  

MediaPlayer对象正好时   使用新的或reset()之后创建的   被调用,它处于空闲状态;   调用release()后,它就是   在 End 状态。介于这两者之间   国家是生命周期   MediaPlayer对象。

     

这是编程错误   调用诸如的方法   getCurrentPosition()...,   空闲时setAudioStreamType(int)   状态。

您应该研究MediaPlayer生命周期图并提供示例并重写您的代码。在这种情况下,您需要在 setDataSource()之前致电setAudioStreamType()

alt text


旁注:在Android中,您确实需要关注生活周期事件,否则您会被咬伤。您可以编写不正确的代码,直到运行时才会知道,或者更糟糕的是,您可能会编写您认为有用的代码,并且您只会在奇怪的情况下发现它不会...屏幕方向改变,回调方法在这种情况下不一样,或其他类似情况(主页按钮等)。

答案 1 :(得分:2)

我在尝试设置音频流类型方面遇到了类似问题,我发现本指南很有帮助: API gaps: an Android MediaPlayer example