【问题标题】:Error while trying to start media player: start called in state error (-38, 0)尝试启动媒体播放器时出错:启动状态错误 (-38, 0)
【发布时间】:2015-06-04 05:14:56
【问题描述】:

我有一个包含你的职位的 GridView,我在 onCreate 上做了案例,所以,

case 位置 = 1 播放音频1,

case 位置 = 2 播放音频2

但是当我执行时,显示错误并停止播放声音。

start call in state error (-38, 0)

活动:

public class HomeEnglishFoodsActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_english_foods);

GridView gridView = (GridView) findViewById(R.id.gridviewHomeEnglishFoods);
gridView.setAdapter(new AdapterHomeEnglishFoodsActivity(this));

final MediaPlayer mpApple = MediaPlayer.create(this, R.raw.apple);
final MediaPlayer mpBeer = MediaPlayer.create(this, R.raw.beer);
final MediaPlayer mpCoffee = MediaPlayer.create(this, R.raw.coffee);
final MediaPlayer mpCheese = MediaPlayer.create(this, R.raw.cheese);
final MediaPlayer mpFrenchfries = MediaPlayer.create(this, R.raw.frenchfries);
final MediaPlayer mpIcecream = MediaPlayer.create(this, R.raw.icecream);
final MediaPlayer mpHotdog = MediaPlayer.create(this, R.raw.hotdog);
final MediaPlayer mpWine = MediaPlayer.create(this, R.raw.wine);

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {
        switch (position) {
            case 0:
                mpApple.start();
                break;
            case 1:
                mpBeer.start();
                break;
            case 2:
                mpCoffee.start();
                break;
            case 3:
                mpCheese.start();
                break;
            case 4:
                mpFrenchfries.start();
                break;
            case 5:
                mpIcecream.start();
                break;
            case 6:
                mpHotdog.start();
                break;
            case 7:
                mpWine.start();
                break;
        }

    }
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_home_english_foods, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
    return true;
}

return super.onOptionsItemSelected(item);
}
}

错误:

06-04 00:46:21.334  17752-17752/br.gabrielrossetto.tap4learn E/MediaPlayer﹕    Error (-19,0)
06-04 00:46:29.612  17752-17752/br.gabrielrossetto.tap4learn E/MediaPlayer﹕ start called in state 0
06-04 00:46:29.612  17752-17752/br.gabrielrossetto.tap4learn E/MediaPlayer﹕ error (-38, 0)
06-04 00:46:29.652  17752-17752/br.gabrielrossetto.tap4learn E/MediaPlayer﹕ Error (-38,0)

【问题讨论】:

标签: android gridview media-player


【解决方案1】:

此错误通常表示您在错误状态下尝试调用函数,例如在媒体播放器尚未准备好时调用 seek。 尝试添加mpApple.setOnPreparedListener() 侦听器,然后在准备好后调用start(),此外,您还需要按照文档中的建议释放播放器,所以我建议您制作一个MediaPlayer 实例,然后停止+释放在使用它播放新的音频文件之前。例如

 public class HomeEnglishFoodsActivity extends ActionBarActivity
 {
       MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
{
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View int position, long id) {
                switch (position)
                {
                    case 0:
                        if(player1 !=null)
                        {
                            player1.stop();
                            player1.release();
                        }
                        player1.create(this, R.raw.apple).setOnPreparedListener(new OnPreparedListener() {
                            @Override
                            public void onPrepared(MediaPlayer mediaPlayer)
                            {
                                mediaPlayer.start();
                            }
                        });
                }
            }
        });
}
}

【讨论】:

    【解决方案2】:

    在停止 mediaPlayer 的地方它会给出错误,因为启动 mediaPlayer 会继续并且您会进一步启动。你的解决方案是你停止媒体然后重新开始它的工作原理。

    【讨论】:

    • 我像这样添加停止“案例1:mpBeer.stop(); mpBeer.start(); break;”但是当我跑步时不播放任何声音。
    【解决方案3】:

    像这样尝试..

     switch (position) {
     case 0:
    
        if (mp != null)
        mp.release(); 
         mpApple.start();
        break;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2016-08-12
      相关资源
      最近更新 更多