2012-02-11 75 views
0

我刚刚开发一个快速的Android应用程序。Android SDK媒体录像机。状态4

小问题。什么是状态4?

我使用的MediaPlayer我每次运行应用程序时,我得到一个错误,指出媒体播放器“开始()”首次调用状态0,然后状态4

有谁知道什么状态4是什么?

我能找出问题,如果我知道的状态,例如状态1和2 ...

感谢,

+0

你的问题是“什么是状态4”,你给了一个很好的答案。你应该接受这个答案。如果你的代码还没有工作,去问另一个问题。 – 2013-10-09 16:57:36

回答

7

这是MediaPlayer.h在Android源:

enum media_player_states { 
    MEDIA_PLAYER_STATE_ERROR  = 0, 
    MEDIA_PLAYER_IDLE    = 1 << 0, 
    MEDIA_PLAYER_INITIALIZED  = 1 << 1, 
    MEDIA_PLAYER_PREPARING   = 1 << 2, 
    MEDIA_PLAYER_PREPARED   = 1 << 3, 
    MEDIA_PLAYER_DECODED   = 1 << 4, 
    MEDIA_PLAYER_STARTED   = 1 << 5, 
    MEDIA_PLAYER_PAUSED    = 1 << 6, 
    MEDIA_PLAYER_STOPPED   = 1 << 7, 
    MEDIA_PLAYER_PLAYBACK_COMPLETE = 1 << 8 
}; 

因此,0将是MEDIA_PLAYER_STATE_ERROR,4将是MEDIA_PLAYER_PREPARING。 在调用start()之前是否调用了prepare()或prepareAsync()?

这些都是MediaRecorder指出:

enum media_recorder_states { 
    MEDIA_RECORDER_ERROR     =  0, 
    MEDIA_RECORDER_IDLE     = 1 << 0, 
    MEDIA_RECORDER_INITIALIZED   = 1 << 1, 
    MEDIA_RECORDER_DATASOURCE_CONFIGURED = 1 << 2, 
    MEDIA_RECORDER_PREPARED    = 1 << 3, 
    MEDIA_RECORDER_RECORDING    = 1 << 4, 
}; 

所以对于记录,状态4 MEDIA_RECORDER_DATASOURCE_CONFIGURED。

+0

以下是我在代码中实现的内容。我在我的类中创建了一个全局/“extends”:'最终MediaPlayer mediaPlayer = new MediaPlayer();'当我要启动MediaPlayer时,我调用'reset()',然后使用setAudioStreamType,setDataSource (/sdcard/audio.3gp)和prepareAsync()'按顺序放在'try'块中。那时我终于打电话给'start();' – 2012-02-11 17:00:17

+0

我还没有添加准备。它应该直接在'prepareAsync()'的try和catch之后吗? – 2012-02-11 17:06:17

+0

使用prepareAsync()时,必须实现OnPreparedListener,调用setOnPreparedListener()并在调用start()之前等待onPrepared()回调。 – 2012-02-11 17:08:26