Android MediaPlayer问题:“错误(-38,0)”和“在状态1中停止调用”

时间:2012-08-11 08:10:46

标签: android media-player android-mediaplayer

即使是模拟器,我的设备也没有声音。

实际上,在行“mMediaPlayer.create(this,musicIds [0]);”,eclipse告诉我两个选择:“使用'MediaPlayer'更改对静态的访问权限(声明)键入“”将@SuppressWarnings'static-access'添加到Create()“。顺便说一句,我采取了eclipse的建议........但仍然无法工作。

P.S。我从其他项目(寻呼机)调用了一个包。

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setTitle(R.string.diff_title);
    setContentView(R.layout.title_layout);    


    viewFlow = (ViewFlow) findViewById(R.id.viewflow);
    DiffAdapter adapter = new DiffAdapter(this);
    viewFlow.setAdapter(adapter);  
    TitleFlowIndicator indicator = (TitleFlowIndicator) findViewById(R.id.viewflowindic);
    indicator.setTitleProvider(adapter);
    viewFlow.setFlowIndicator(indicator);


    //Set all views
    listView = (ListView) findViewById(R.id.listView1);
    listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, listeStrings));
    final ImageView imv=(ImageView)findViewById(R.id.imv);
    imv.setImageResource(imageIds[0]);
    final ImageView pic = (ImageView)findViewById(R.id.Picture);
    pic.setImageResource(imageIds[0]);

    btnPlay = (ImageButton)findViewById(R.id.btnplay);
    btnPlay.setOnClickListener(this);

    btnNext = (ImageView)findViewById(R.id.imvnext);
    btnLast = (ImageView)findViewById(R.id.imvlast);        
    final TextView textview = (TextView)findViewById(R.id.textView2);
    textview.setText(listeStrings[0]);  
    seekBar = (SeekBar)findViewById(R.id.seekbar);
    //seekBar.setMax(mMediaPlayer.getDuration());

    mMediaPlayer.create(this, musicIds[0]);

    try {
           if (mMediaPlayer != null) {
               mMediaPlayer.stop();
           }
           mMediaPlayer.prepare();
           mMediaPlayer.start(); 
    } catch (IllegalStateException e) {
           e.printStackTrace();
    } catch (IOException e) {
           e.printStackTrace();
    }

    listView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            int songIndex = position;
            String songTitle=musicNames[position];
            imv.setImageResource(imageIds[position]);
            pic.setImageResource(imageIds[position]);
            textview.setText(listeStrings[position]);

        }
    });


}


}

这是我的logcat:

08-11 07:33:19.217: E/MediaPlayer(338): stop called in state 1
08-11 07:33:19.217: E/MediaPlayer(338): error (-38, 0)
08-11 07:33:19.217: E/MediaPlayer(338): prepareAsync called in state 0
08-11 07:33:19.217: W/System.err(338): java.lang.IllegalStateException
08-11 07:33:19.227: W/System.err(338):  at android.media.MediaPlayer.prepare(Native Method)
08-11 07:33:19.227: W/System.err(338):  at org.taptwo.android.widget.viewflow.example.DiffViewFlowExample.onCreate(DiffViewFlowExample.java:95)
08-11 07:33:19.227: W/System.err(338):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-11 07:33:19.227: W/System.err(338):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
08-11 07:33:19.227: W/System.err(338):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-11 07:33:19.227: W/System.err(338):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-11 07:33:19.227: W/System.err(338):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-11 07:33:19.227: W/System.err(338):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 07:33:19.227: W/System.err(338):  at android.os.Looper.loop(Looper.java:123)
08-11 07:33:19.227: W/System.err(338):  at android.app.ActivityThread.main(ActivityThread.java:3683)
08-11 07:33:19.227: W/System.err(338):  at java.lang.reflect.Method.invokeNative(Native Method)
08-11 07:33:19.227: W/System.err(338):  at java.lang.reflect.Method.invoke(Method.java:507)
08-11 07:33:19.227: W/System.err(338):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-11 07:33:19.227: W/System.err(338):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-11 07:33:19.227: W/System.err(338):  at dalvik.system.NativeStart.main(Native Method)<br>
08-11 07:33:19.257: E/MediaPlayer(338): Error (-38,0)

1 个答案:

答案 0 :(得分:12)

prepare()之前,您需要先致电setDataSource(..)

媒体框架是一个非常严格的state machine,处理所有不同的状态真的很麻烦。

我使用了这个小wrapper,使编码/调试更容易一些。你可以尝试一下。

关于模拟器 - 请注意,并非所有文件格式都受支持。