Android的MediaPlayer的问题:"错误(-38,0)"和"停止叫状态1 QUOT; [英] Android MediaPlayer Problems :"Error (-38 , 0) " and "stop called in state 1"

查看:1731
本文介绍了Android的MediaPlayer的问题:"错误(-38,0)"和"停止叫状态1 QUOT;的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是没有从我的设备连仿真器的声音。

事实上,在该行的mMediaPlayer.create(这一点,musicIds [0]);,月蚀意味着我两​​个选择:更改访问静态使用的MediaPlayer(声明型)添加@燮pressWarnings'静态访问关于创建()。顺便说一句,我把日食的建议........但仍然不起作用。

P.S。我从其他的项目(寻呼机)称为包。

 公共无效的onCreate(包savedInstanceState){

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


    viewFlow =(ViewFlow)findViewById(R.id.viewflow);
    DiffAdapter适配器=新DiffAdapter(本);
    viewFlow.setAdapter(适配器);
    TitleFlowIndicator指标=(TitleFlowIndicator)findViewById(R.id.viewflowindic);
    indicator.setTitleProvider(适配器);
    viewFlow.setFlowIndicator(指标);


    //设置所有视图
    ListView的=(的ListView)findViewById(R.id.listView1);
    listView.setAdapter(新ArrayAdapter<字符串>(这一点,android.R.layout.simple_list_item_1,listeStrings));
    最后ImageView的IMV =(ImageView的)findViewById(R.id.imv);
    imv.setImageResource(imageIds [0]);
    最后ImageView的PIC =(ImageView的)findViewById(R.id.Picture);
    pic.setImageResource(imageIds [0]);

    btnP​​lay =(的ImageButton)findViewById(R.id.btnplay);
    btnP​​lay.setOnClickListener(本);

    btnNext =(ImageView的)findViewById(R.id.imvnext);
    btnLast =(ImageView的)findViewById(R.id.imvlast);
    最后的TextView的TextView =(TextView中)findViewById(R.id.textView2);
    textview.setText(listeStrings [0]);
    搜索栏=(搜索栏)findViewById(R.id.seekbar);
    //seekBar.setMax(mMediaPlayer.getDuration());

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

    尝试 {
           如果(mMediaPlayer!= NULL){
               mMediaPlayer.stop();
           }
           mMediaPlayer prepare()。
           mMediaPlayer.start();
    }赶上(IllegalStateException异常E){
           e.printStackTrace();
    }赶上(IOException异常E){
           e.printStackTrace();
    }

    listView.setOnItemClickListener(新OnItemClickListener(){

        公共无效onItemClick(适配器视图<>母公司视图中查看,INT位置,长的id){
            INT songIndex =位置;
            字符串songTitle = musicNames [位置]
            imv.setImageResource(imageIds [位置]);
            pic.setImageResource(imageIds [位置]);
            textview.setText(listeStrings [位置]);

        }
    });


}


}
 

这是我的logcat:

 七月8号至11日:33:19.217:E / MediaPlayer的(338):停止调用状态1
7月八日日至11日:33:19.217:E / MediaPlayer的(338):错误(-38,0)
7月八日日至11日:33:19.217:E / MediaPlayer的(338):prepareAsync称为状态0
7月八日日至11日:33:19.217:W / System.err的(338):java.lang.IllegalStateException
7月八日日至11日:33:19.227:W / System.err的(338):在android.media.MediaPlayer prepare(本机方法)
7月八日日至11日:33:19.227:W / System.err的(338):在org.taptwo.android.widget.viewflow.example.DiffViewFlowExample.onCreate(DiffViewFlowExample.java:95)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.ActivityThread.access $ 1500(ActivityThread.java:117)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:931)
7月八日日至11日:33:19.227:W / System.err的(338):在android.os.Handler.dispatchMessage(Handler.java:99)
7月八日日至11日:33:19.227:W / System.err的(338):在android.os.Looper.loop(Looper.java:123)
7月八日日至11日:33:19.227:W / System.err的(338):在android.app.ActivityThread.main(ActivityThread.java:3683)
7月八日日至11日:33:19.227:W / System.err的(338):在java.lang.reflect.Method.invokeNative(本机方法)
7月八日日至11日:33:19.227:W / System.err的(338):在java.lang.reflect.Method.invoke(Method.java:507)
7月八日日至11日:33:19.227:W / System.err的(338):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
7月八日日至11日:33:19.227:W / System.err的(338):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
7月八日日至11日:33:19.227:W / System.err的(338):在dalvik.system.NativeStart.main(本机方法)< BR>
7月八日日至11日:33:19.257:E / MediaPlayer的(338):错误(-38,0)
 

解决方案

prepare(),你需要先调用的setDataSource (..)

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

我用这个小包装,使编码/调试变得容易一些。你可以试试看。

对于模拟器 - 注意,并非所有的文件格式,它支持

It's no sound from my device even the emulator.

Actually, at the line "mMediaPlayer.create(this, musicIds[0]); " , eclipse suggests me two choices : "Change access to static using 'MediaPlayer'(declaring type)" or "Add @SuppressWarnings 'static-access' to on Create()". By the way, I take eclipse's suggestions........but still don't work.

P.S. I called a package from other project (pager).

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]);

        }
    });


}


}

And this is my 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)

解决方案

Before prepare(), you need first to call setDataSource(..).

The Media framework is a very strict state machine, and it's really cumbersome to handle all the different states.

I've used this little wrapper that makes the coding/debugging a bit easier. You can give it a try.

Regarding emulator - note that not all file formats are supported on it.

这篇关于Android的MediaPlayer的问题:&QUOT;错误(-38,0)&QUOT;和&QUOT;停止叫状态1 QUOT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆