2015-06-04 2 views
3

У меня есть GridView с вашими позициями, и я делаю дело по OnCreate, Так,Ошибка при попытке запуска медиаплеера: начать называется в состоянии ошибки (-38, 0)

case position = 1 play audio1,

case position = 2 play audio2

Но когда Я выполняю, повторяю ошибку и останавливаю звуки воспроизведения.

start called 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) 
+0

ли вы проверить эти http://stackoverflow.com/questions/9888510/mediaplayer-error-19-0-after-repeated-plays http://stackoverflow.com/questions/16172496/mediaplayer -error-19-0-doesnt-work-with-release –

+0

Я использую release, но не воспроизвожу аудио. Просто играйте с началом. –

ответ

1

Эта ошибка обычно означает, что вы пытаетесь вызвать функцию в неправильном состоянии, например, призывая искать в то время как медиа-плеер еще не готов. Попытайтесь добавить 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(); 
          } 
         }); 
       } 
      } 
     }); 
} 
} 
+0

Большое спасибо! Это сработало! –

0

Где вы остановить MediaPlayer это дает ошибку, потому что начинают MediaPlayer продолжать и дальше вы начинаете. ваше решение - вы остановите носитель, а затем запустите его снова.

+0

Я добавляю стоп как этот «случай 1: mpBeer.stop(); mpBeer.start(); break;» но когда я запускаю, не воспроизвожу никакого звука. –

0

try like this..

switch (position) { 
case 0: 

    if (mp != null) 
    mp.release(); 
    mpApple.start(); 
    break; 
    } 
Смежные вопросы