Пользовался при разработке своего плеера стоковой библиотекой MediaPlayer для Android и вот, после n-ного количества смена DataSource'а, она решила мне сказать нет и кинула IllegalStateException на prepare. Чтобы добавить понимания, скажу, что это был цикл, в котором менялся лишь путь до файла и следовательно исключение должно было бы выпасть на первой итерации, но 6 итерация она точно проходит успешно. На какой она валится, выяснить не удалось.
В итоге, проще найти другую библиотеку, чем починить эту, т.к. отказаться от данного цикла у меня нет возможности.
Код:
public class Song {
static MediaPlayer play = new MediaPlayer();
static ArrayList<Song> Songs = new ArrayList<>();
String name;
String path;
int Duration;
int Number;
Song(String songName, String songPath){
name = songName;
path = songPath;
try {
play.setDataSource(songPath);
} catch (IOException e) {
e.printStackTrace();
}
try {
play.prepare();
} catch (IOException e) {
e.printStackTrace();
}
Duration = play.getDuration();
play.reset();
Number = Songs.size();
Songs.add(this);
}
Другой класс ищет все песни на устройстве и при нахождении вызывается данный конструктор.
Быть может способ не самый удачный, но других я не знаю. С MediaMetadataRetriever все крашится еще быстрее.