Android ICS MediaPlayer вылетает только на переменных, предназначенных для одновременного воспроизведения

1

У меня есть два типа воспроизведения MediaPlayer в двух разных приложениях. Одна из них - это единственная переменная, которая ждет, пока она не закончит воспроизведение следующего слова/звукового эффекта. Кажется, это работает нормально. Другой - это набор из 4 переменных MediaPlayer, которые воспроизводятся одновременно. Это работает в 2.3.3 и, похоже, работает на виртуальном устройстве 4.0.3, но на моем TF101 он падает в обоих приложениях.

При неправильном касании будет вызываться playse ('oops').

public void playse(String ss){
    MediaPlayer tempse;

    if(tse1 == null){tempse = tse1;}
    else{if(tse2 == null){tempse = tse2;}
    else{if(tse3 == null){tempse = tse3;}
    else{if(tse4== null){tempse = tse4;}}}}

   if(ss == "oops"){ tempse =  MediaPlayer.create(mContext, R.raw.seoops); tempse.start();}
}

В основном цикле приложения 4 переменные обрабатываются следующим образом:

        if(tse1 != null){ if(tse1.isPlaying()== false){tse1.release(); tse1=  null;} }

        if(tse2 != null){ if(tse2.isPlaying()== false){tse2.release(); tse2=  null;} }

        if(tse3 != null){ if(tse3.isPlaying()== false){tse3.release(); tse3=  null;} }  

        if(tse4 != null){ if(tse4.isPlaying()== false){tse4.release(); tse4=  null;} }
  • 0
    Ваш вопрос действительно не объясняет, что вы пытаетесь сделать. Но, кроме этого, никогда не используйте == для сравнения Strings это может привести к непредсказуемым результатам. Замените if(ss == "oops") на if (ss.equals("oops")) .
Теги:
media-player
crash
android-4.0

1 ответ

0

Вы можете сокращать это

MediaPlayer tempse;
if(tse1 == null){tempse = tse1;}
else{if(tse2 == null){tempse = tse2;}
else{if(tse3 == null){tempse = tse3;}
else{if(tse4== null){tempse = tse4;}}}}

в

MediaPlayer tempse = null;

Может быть, вы должны изменить == на !=

Это единственное, что я вижу, не зная, какую ошибку вы получите.

  • 0
    Я пытался учесть одновременные звуки. Я думал, что использую ссылку, которая будет указывать на один из 4 продолжающихся звуков. Скинул какой-то код на него, и когда он работал в 2.3.3, я пошел дальше. Подумайте, что мне нужно сделать, это просто удалить все tse1-4 и загрузить / воспроизвести файлы, не беспокоясь о наличии переменной для проверки позже. Я думаю, что сопутствующий звуковой код в очереди заставил меня подумать, что он будет более сложным. Благодарю. Просто странно, что он работал в 2.3.3 и, казалось бы, в виртуальном устройстве, но не на моем TF101 с 4.0.3
  • 0
    Казалось бы, Soundpool - лучший способ обработки нескольких звуков одновременно. Даже при удалении другого кода отладчик показывает множество проблем, и качество звука снижается, если звуки воспроизводятся быстро при использовании MediaPlayer.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню