Я разрабатываю приложение, которое переводит фразы с английского на другой язык. Я использую ExpandableListView и данные привязки через BaseExpandableListAdapter. Вкратце: когда вы щелкаете элемент списка, открывается подпункт, где вы можете увидеть перевод и в то же время говорит голос. Проблема в том, что время от времени звук не воспроизводится - особенно для более длинных фраз. И то, что я вижу в логарифме, это следующее:
1) КОГДА ЗВУК НЕ ВОСПРОИЗВОДИТСЯ ВООБЩЕ...
Образец не загружен. Ожидание 30 мс. ОБРАЗЕЦ X НЕ ГОТОВ
2) КОГДА ЗВУК ДЕЙСТВИТЕЛЬНО ВОСПРОИЗВОДИТСЯ
* Образец не был загружен. Ожидание 30 мс.
Так что ДАЖЕ, если звук воспроизводится, logcat сообщает, что «сэмпл не готов».
Хорошо, это информация, которую дает logcat. Другое дело, что вероятность отказа больше для больших звуковых файлов. Небольшие звуковые файлы воспроизводятся в течение двух секунд (около 30 КБ), а большие около 4 секунд (около 60 КБ).
Сейчас я не могу понять, как решить эту проблему. Я искал в Интернете решения, особенно на этом сайте. Я оба пытался....
1) используйте OnLoadCompleteListener()
и его НЕ РАБОТАЕТ
2) сделать какой-то цикл while.
Тоже не работает
Что я мог сделать не так. Я даю код ниже. Может что-то обидное? Например, я неправильно реализовал слушателя?
искренне
expList.setOnGroupExpandListener(new OnGroupExpandListener() {
public void onGroupExpand(int groupPosition) {
final int group_position = groupPosition;
loaded = false;
int nmbr_childs = adapter.getChildrenCount(groupPosition);
if (nmbr_childs == 1) {
myVoice = soundPool.load(PhraseActivity.this, sound[group_position][0], 2);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId,
int status) {
loaded = true;
}
});
if (loaded) {
soundPool.play(myVoice, 20, 20, 1, 0, 1f);
}
else {
System.out.println("something wrong with soundpool!");
}
}
group = groupPosition;
int len = adapter.getGroupCount();
for (int i = 0; i < len; i++) {
if (i != groupPosition) {
expList.collapseGroup(i);
}
}
}
});